建议和反馈

请填写你的反馈内容

问答 > 以太坊 > 问答详情

以太坊部署的合同无法执行10LK

我在这里有合同:

语用强度^ 0.4.2;

contract Charity{
    mapping (address => uint) public coinBalanceOf;
    event CoinTransfer(address sender, address receiver, uint amount);
    function charity(uint supply){
        coinBalanceOf[msg.sender] = supply;
    }
    function sendCoin(address receiver, uint amount) returns (bool sufficient)
    {
        if (coinBalanceOf[msg.sender] < amount) return false;
        coinBalanceOf[msg.sender] -= amount;
        coinBalanceOf[receiver]   += amount;
        CoinTransfer(msg.sender, receiver, amount);
        return true;
    }}

当我部署web3 1.0.0-beta

import * as fs       from 'fs'       ;import * as solc     from 'solc'     ;import * as Web3     from 'web3'     ; var web3   = new Web3(new Web3.providers.WebsocketProvider('ws://localhost:8546'));var contract_path : string = "../solidity/contracts/Charity.sol"const input       = fs.readFileSync(contract_path)const output      = solc.compile(input.toString(), 1);var contract_name = ":" + pr.last(contract_path.split("/")).split(".")[0]const bytecode    = output.contracts[contract_name].bytecodeconst abi_        = JSON.parse(output.contracts[contract_name].interface);web3.eth.getAccounts().then(accounts => {
    var coinbase = accounts[0];
    var receiver = accounts[1];
    // create contract
    var myContract = new web3.eth.Contract(abi_, coinbase,
        {
            from    : coinbase,
            gasPrice: "2000000"
        });
    var deployedContract = myContract.deploy({
        data: '0x' + bytecode,
    }).send({
        from: coinbase,
        gas : 1500000 ,
        gasPrice: '30000000000000'            
    }, (err, hash) => {
        if (err) { console.log("error on deployment: ", err) }
        console.log("Hash: ", hash)
    })
    myContract.methods.sendCoin(receiver, 7000000).send({ 
        from: coinbase,
        gas: 100000,
        gasPrice: '10000000'
    }, (err,val) => {
            if (err) { console.log(err) }
            else {
                console.log("sent coin: ", val)
            }
        })
    .then(console.log)  });

但是,当我将其部署在正在挖掘的私有区块链上时,我看不到接收者余额的变化。

==================编辑==============================

我按照下面的答案将供应参数传递到合同中,但是它仍然没有执行。可能是由于计时问题所致,因此我将sendCoin函数按如下所示移至了回调,但仍未执行:

   var myContract = new web3.eth.Contract(abi_, coinbase,
        {
            from    : coinbase,
            gasPrice: "2000000",
        });
    /**
        maybe there should be a callback up there ----^ ???
    */
    var deployedContract = myContract.deploy({
        data: '0x' + bytecode,
        arguments: [2406927999999]  // this is not sending
        // web3.eth.getBalance(coinbase)] note the raw number gets error: number-to-bn
        // is it because it's too big?
    }).send({
        from: coinbase,
        gas : 1500000 ,
        gasPrice: '30000000000000'            
    }, (err, hash) => {
        if (err) { console.log("error on deployment: ", err) }
        console.log("contract deployed with Hash: [REDACTED]")
    }).then((v) => {
            /**
                maybe this should happen in the callback?
            */


2020-07-15
0
请先登陆或注册

卖拐卖拐2020-07-15

supply初始化合同时,您需要输入的值您可以像这样传递它:

var deployedContract = myContract.deploy({
  data: '0x' + bytecode,
  arguments: [999999999]}).send({
  from: coinbase,
  gas : 1500000 ,
  gasPrice: '30000000000000'            }, (err, hash) => {
  if (err) { console.log("error on deployment: ", err) }
  console.log("Hash: ", hash)})

请参阅此处的部署文档,以了解如何将参数传递到合同构造函数中。

另外,请确保Charity您使用函数名大写以匹配合同的名称(否则,它不是构造函数)。

投一票
评论(0)
赞赏(0)

求助中

解决了这个问题,预计可以帮助到

  • 0
  • 1
  • 1
  • 2
  • 6
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励