Contract-Deployment

在新的智能合約旁邊或內部發送額外數據

  • August 7, 2020

我正在研究乙太坊智能合約的安全性,當我在網路上部署該合約時,我需要在新的智能合約旁邊或內部發送一些額外的數據(例如一些 json 數據)。有可能嗎?我該怎麼做?

有不同的方法來做到這一點。首先,您可以像這樣將數據嵌入到智能合約的程式碼中:

contract Foo {
 string public constant bar = "Hello, World!";
}

其次,您可以將數據作為建構子參數傳遞:

contract Foo {
 constructor (string memory _bar) public {
 }
}

在這個例子中,建構子不對數據做任何事情。但是,鏈下應用程序仍然可以訪問數據。為了使訪問更方便,您可以在事件中記錄數據:

contract Foo {
 event Bar (string bar);

 constructor (string memory _bar) public {
   emit Bar (_bar);
 }
}

如果您希望該智能合約的其他功能可以訪問數據,可以將其保存到儲存變數中:

contract Foo {
 string private bar;

 constructor (string memory _bar) public {
   bar = _bar;
 }
}

如果您需要其他智能合約可以訪問數據,請將儲存變數公開:

contract Foo {
 string public bar;

 constructor (string memory _bar) public {
   bar = _bar;
 }
}

如果您不需要讀取數據的能力,而只是為了驗證它,請考慮僅儲存數據的雜湊值:

contract Foo {
 bytes32 public barHash;

 constructor (string memory _bar) public {
   barHash = keccak256 (bytes (_bar));
 }
}

甚至只傳遞雜湊以在部署時節省氣體:

contract Foo {
 bytes32 public barHash;

 constructor (bytes32 _barHash) public {
   barHash = _barHash;
 }
}

希望這會有所幫助。

引用自:https://ethereum.stackexchange.com/questions/84749