ブロックチェーン内にある契約の変数の値を変更しようとしています。私は、そのコードを控除し、このようなものですしました:Solidity:すでに公開されているスマートコントラクトの変数の値を変更してください
pragma solidity ^0.4.8;
contract Trial {
address public owner;
address public person;
uint initialEther;
function Trial(address _person) payable {
owner = msg.sender;
person = _person;
initialEther = msg.value;
}
modifier only_person() {
if (msg.sender!=person && tx.origin!=person) throw;
_;
}
function() payable {}
bytes4 public signature = bytes4(sha3("libraryFunction()"));
bool variableToBeChanged = false;
function libraryInvocation(address libraryAddress) only_person {
bool doSomething = libraryAddress.delegatecall(signature);
if (variableToBeChanged) {
.....
}
}
}
は私がやろうとしていることへのために、「variableToBeChanged」の値を変更することです、私はライブラリ関数の右側の署名を持っていると仮定しますif内のコードを実行します。 おそらく、適切な名前の関数を持つライブラリを作成し、何らかの方法でアセンブラコードを挿入して変数の値を変更する方法があります。しかし、それは蟻を殺すために原子爆弾を使うことのようなものです。私はこれを行う簡単な方法を探しています。 この契約は安全ではないことも知っていますが、これが可能かどうかを理解しようとしています。
私はそうは思わない。このような契約では可能であることは確かです。たとえば、 https://paste.ofcode.org/8bgCLXjdHb7cNY4ETM72bnのようなライブラリを作成するとします。 これはいくつかの変数の値を変更します。 – Pietro
これはどのように動作するのかわかりません。ただし、導入後は契約を変更することはできません。変数を変更する関数が必要です。 – Simon
動的契約に使用されるdelegatedcallが原因で機能します。このように契約を更新することができます。 – Pietro