簡體   English   中英

如何使用 truffle 框架將大量值轉換為solidity?

[英]How to convert the value in big number in solidity using truffle framework?

我在測試我的合同時遇到了這個錯誤。 除最后一項外,所有測試均通過。 我不明白這個錯誤,請幫助。 智能合約是使用 truffle 框架創建的。

我的彩票合同 sol 文件:

 // SPDX-License-Identifier: GPL-3.0 pragma solidity >= 0.5.2; contract Lottery{ address public manager; address[] public players; constructor()public{ manager=msg.sender; } function enter() public payable{ require(msg.value>0.01 ether); players.push(msg.sender); } function random() private view returns(uint){ return uint(keccak256(abi.encodePacked(block.difficulty,block.timestamp,players))); } function getBalance() public view returns(uint){ return address(this).balance; } function pickWinner() public restricted { address payable winner; uint index=random()% players.length; winner=payable(players[index]); winner.transfer(getBalance()); players=new address[](0); } modifier restricted(){ require(msg.sender==manager); _; } function getPlayers() public view returns(address[] memory){ return players; }}

彩票測試文件

 const assert = require('assert'); const ganache = require('ganache-cli'); const Web3 = require('web3'); const web3 = new Web3(ganache.provider()); const Lottery = artifacts.require('Lottery'); contract('Lottery', (accounts) => { let lottery; beforeEach(async () => { lottery = await Lottery.new({ from: accounts[0] }); }); describe('Lottery Contract', () => { it('deploys a contract', () => { assert.ok(lottery.address); }); it('allows one acc to enter', async () => { await lottery.enter({ from: accounts[0], value: web3.utils.toWei('0.02', 'ether'), }); const players = await lottery.getPlayers({ from: accounts[0] }); assert.equal(accounts[0], players[0]); assert.equal(1, players.length); }); it('allows multiple acc to enter', async () => { await lottery.enter({ from: accounts[0], value: web3.utils.toWei('0.02', 'ether'), }); await lottery.enter({ from: accounts[1], value: web3.utils.toWei('0.02', 'ether'), }); await lottery.enter({ from: accounts[2], value: web3.utils.toWei('0.02', 'ether'), }); const players = await lottery.getPlayers({ from: accounts[0] }); assert.equal(accounts[0], players[0]); assert.equal(accounts[1], players[1]); assert.equal(accounts[2], players[2]); assert.equal(3, players.length); }); it('requires a min amount of ether to enter', async () => { try { await lottery.enter({ from: accounts[0], value: 0, }); assert(false); } catch (err) { assert(err); } }); it('only manager can call pickWinner', async () => { try { await lottery.pickWinner({ from: accounts[1], }); assert(false); } catch (err) { assert(err); } }); it('sends money to the winner and resets the players', async () => { await lottery.enter({ from: accounts[0], value: web3.utils.toWei('2', 'ether'), }); const initialBal = await web3.eth.getBalance(accounts[0]); await lottery.pickWinner({ from: accounts[0], }); const finalBal = await web3.eth.getBalance(accounts[0]); const difference = finalBal - initialBal; console.log(difference); assert(difference > web3.utils.toWei('1.8', 'ether')); }); }); });

我有這個錯誤,請告訴我如何進行轉換。 它表明最后一個測試沒有通過,請幫助我是初學者。 錯誤

我也是初學者,但我想你應該在接收余額時使用 web3.utils.BN。 更多信息在這里:關於 Web3.js 文檔中的 BN。

您的 truffle.config.js 與 ganache 沒有任何關系。

將此添加到您的 truffle-config.js

networks: {
    development: {
      host: "127.0.0.1", 
      // default ganache gui listens to 7545
      port: 7545, 
      network_id: "*", 
    },

確保您的 ganache 正在運行並運行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM