在solidity 0.4.6中使用send()函数时合约抛出无效地址

Posted

技术标签:

【中文标题】在solidity 0.4.6中使用send()函数时合约抛出无效地址【英文标题】:Contract throws Invalid address when using send() function in solidity 0.4.6 【发布时间】:2017-09-21 17:36:26 【问题描述】:

这是我正在尝试的可靠代码。代码的编译工作正常。但是,当我通过 javascript 调用函数 send() 时,它会抛出异常: throw new Error('invalid address');

pragma solidity ^0.4.6; 
contract Agreement 
   address owner;
   address seller; 
   uint amount; 

   function Agreement(address _seller,uint _amount) 
     owner = msg.sender; seller=_seller; amount=_amount;
    

   function send()
    if (owner.balance < amount) throw;      
    if (seller.balance + amount < seller.balance) throw;
    if(!seller.send(amount))throw;
     

这是javascript代码

var compiled = web3.eth.compile.solidity(contractRaw);
var contract = web3.eth.contract(compiled.info.abiDefinition);
var nContract = contract.new('0x61e323dcf5e116597d96558a91601f94b1f80396',web3.toWei(10, "ether"),from:this.web3.eth.coinbase, data: compiled.code, gas: 380000, function(e, contractDetails)
        if(!e) 

            if(!contractDetails.address) 
                console.log("Contract transaction send: TransactionHash: " + contractDetails.transactionHash + " waiting to be mined...");

             else 
                console.log("Contract mined! Address: " + contractDetails.address);
                console.log(contractDetails.send())

            

        
    );

每当代码运行时,它都会抛出无效地址错误并崩溃。

【问题讨论】:

您是否尝试过使用控制台中显示的某个帐户的硬编码值替换 this.web3.eth.coinbase?。可能 this.web3.eth.coinbase 为空或未定义。 【参考方案1】:

试试61e323dcf5e116597d96558a91601f94b1f80396,不用0x

【讨论】:

【参考方案2】:

该地址确实存在 (etherscan link) > ,但它不是合约地址。如果是,必须打开like this。

当您将合约部署到以太坊时,您必须复制合约创建时产生的哈希(交易哈希)并在 etherscan 上搜索它。它将打开所有交易细节,包括创建的合约哈希。 使用该哈希。

【讨论】:

以上是关于在solidity 0.4.6中使用send()函数时合约抛出无效地址的主要内容,如果未能解决你的问题,请参考以下文章

Solidity极简入门#29. 函数选择器Selector

solidity中转账接收者与发起者的问题

使用 truffle 在solidity 中调用函数时出现新的 BigNumber() 错误。如何修复错误?

坚固性 |松露 |网络3 |气体限制

我们可以在智能合约中使用 Solidity 获取过去区块中记录的交易信息吗?

在推力函子中使用 CURAND