「一度デプロイしたスマートコントラクトは修正することができない」
というのは理解はしていました
そのためデプロイする際には、不具合が無いようにするのだけど、やはり完全ではない
だとすればどうすれば?
いくつか調べてたところ、「delegatecallを使えば外部コントラクトを呼び出せる」とあったのでそれで差し替えることにしてみる
2つのコントラクトを用意、先にconslibのアドレスをmainにセットする形をとる
conslib.sol
pragma solidity ^0.4.0;
library conslib {
function foo(uint _offset) constant returns(string _result)
{
return "hello world";
}
}
main.sol
pragma solidity ^0.4.18;
//
contract main
{
uint public result_;
address public conslib = 0x00;
string public message = "no message";
function main(address _const) public{
conslib = _const;
}
function foo() public returns(bool){
return conslib.delegatecall(msg.data);
}
function setContract(address _const) public {
conslib = _const;
}
function getContract() returns(address){
return conslib;
}
function setMessage(string _message) returns(bool){
message = _message;
return true;
}
function getMessage() returns (string) {
return message;
}
}
こんな感じで差し替えができる感じとなる
あとは、conslibの新しいものを別途作りデプロイして、setContractでアドレスを設定すれば差し替えれれる・・・はずです。
この後の課題としては、差し込んだコントラクトの戻り値をどうやって取得するか、もしくはコントラクトから元のを操作させるかである