我有一个使用testrpc部署的简单托管契约。我不知道如何与方法交互,一旦我创建了一个初始化的新方法。
这是合同:
pragma solidity ^0.4.4;
contract Escrow {
address public buyer;
address public seller;
address public arbiter;
function Escrow(address _seller, address _arbiter) {
buyer = msg.sender;
seller = _seller;
arbiter = _arbiter;
}
function payoutToSeller() {
if(msg.sender == buyer || msg.sender == arbiter) {
seller.send(this.balance);
}
}
function refundToBuyer() {
if(msg.sender == seller || msg.sender == arbiter) {
buyer.send(this.balance);
}
}
function getBalance() constant returns (uint) {
return this.balance;
}
}控制台在创建托管合同的新实例时返回以下内容:
Escrow.new([acct2, acct3]).then(function(instance) { console.log(instance.address);})
0x7982e782f1f3937d7b626691b11216155b6b47d0
undefined 所以它似乎起了作用。我的问题是,我如何与该合同互动,以给它一些价值?类似于我如何使用部署的MetaCoin契约使用类似于MetaCoin.deployed().then(function(instance) { return instance.sendCoin(acct1, 10, {from: acct2});})的东西?
而且,在这种情况下,谁是msg.sender?
谢谢你的帮助。
更新设置address = Escrow.new([acct2, acct3]).then(function(instance) { return instance.address;})
尝试向Escrow.at(address)添加契约地址并接收以下错误Error: Invalid address passed to Escrow.at(): [object Promise]。还尝试了Escrow.at(address).get()并获得了相同的错误。谢谢。
发布于 2017-07-05 13:58:28
首先,为了使您的合同接受eth,您需要实现一个回退函数:
function() payable {}然后你可以发送一些eth到你的合同:
web3.eth.sendTransaction({from:accounts[0], to:"YOUR_CONTRACT_ADDRESS", value: web3.toWei(1, "ether")});以及呼叫合同方法:
Escrow.at("YOUR_CONTRACT_ADDRESS").payoutToSeller({from:acct3});这个调用遵循您的示例,使用acc3,它在契约构造函数中定义为arbiter,作为发布事务的帐户。
https://ethereum.stackexchange.com/questions/19474
复制相似问题