我已签订合同" greeter"在以太坊
contract mortal {
address owner;
function mortal() { owner = msg.sender; }
function kill() { if (msg.sender == owner) selfdestruct(owner); }
}
contract greeter is mortal {
string greeting;
function greeter(string _greeting) public {
greeting = _greeting;
}
function greet() constant returns (string) {
return greeting;
}
}
我想创建另一个合同,它将调用函数" kill"从我的第一份合同。主要的想法是这两个合同是不同的。我发布合同A然后发布合同B,它叫A。
我怎么能这样做? 这样的事情,但来自合同......
var contract = web3.eth.contract(contractAddress, ABI);
contract.call().kill();
答案 0 :(得分:1)
大致相同,但有一个问题。
pragma solidity ^0.4.6;
contract Mortal {
address owner;
function Mortal() { owner = msg.sender; }
function kill() { if (msg.sender == owner) selfdestruct(owner); }
}
contract Greeter is Mortal {
string greeting;
function Greeter(string _greeting) public {
greeting = _greeting;
}
function greet() constant returns (string) {
return greeting;
}
}
contract Killer {
function destroyVictim(address victim) {
Greeter g = Greeter(victim);
g.kill();
}
}
这是一个基本语法。通过将Greeter与Killer一起包含在源文件中来获取ABI;也就是说,编译器可以“看到它”。
到目前为止,这么好。
出现的问题是,由于if(msg.sender==owner)
,Greeter将忽略该命令。它不会。这将是杀手得到的任何地址。
在部署Greeter之前,此的可能解决方案是预期需要changeOwner()
功能,通常仅为当前所有者保留。
希望它有所帮助。