Go-Ethereum

是否可以在創世區塊中預載入合約?

  • February 14, 2022

這是我嘗試使用的設置:

一個 genesis.json,其 alloc 欄位設置為包含程式碼。

"alloc": {
   "0000000000000000000000000000000000000001": {
     "code": "6060604052608f8060106000396000f360606040526000357c0100000000000000000000000000000000000000000000000000000000900480634e70b1dc14604157806360fe47b114606257603f565b005b604c60048050506078565b6040518082815260200191505060405180910390f35b607660048080359060200190919050506081565b005b60006000505481565b806000600050819055505b5056"
   }
}

然後執行 geth 並輸入(使用預設帳戶設置、解鎖和載入):

var getAndSetContract = eth.contract([{"constant":true,"inputs":[],"name":"num","outputs":[{"name":"","type":"uint256" }],"type":"function"},{"constant":false,"inputs":[{"name":"val","type":"uint256"}],"name":"set" ,"輸出":[],"類型":"函式"}])
var getAndSet = getAndSetContract.at("00000000000000000000000000000000000000001")
getAndSet.set(2, {gas: 1000000})
礦工.start()
// 鑑於這是在一個私有測試區塊鏈上,一些塊很快就會滾進來
礦工.stop()
getAndSet.num()

最終返回值為

3.054357634959941643970700719428062453954541146150392020568168920432276498019e+75

與想要的

2

以下是契約來源:

合約 getAndSet {
公共單位編號
函式集(uint val){
數 = 值;
}
}

整個冒險是在 geth 源中遇到這條線後開始的:https ://github.com/ethereum/go-ethereum/blob/290e851f57f5d27a1d5f0f7ad784c836e017c337/core/genesis.go#L56我想我過去看到了一些關於預載入合約的東西,儘管我無法探勘任何東西。AFAIK 我可能會試圖利用一個半實現的功能。

你是如何建立你的契約的?如果您想將合約添加到創世塊,您需要使用solc --bin-runtime.

預設情況下,用於創建合約的 solc 和 ide 之類的 remix 建構返回程式碼。此程式碼返回儲存在區塊鏈中的實際程式碼

您的方法不返回任何值。呼叫**set()**將返回呼叫事務的事務雜湊。您還需要指定部署交易的賬戶:

getAndSet.set(2, {eth.accounts[0], gas: 1000000});

(確保您在該帳戶上有足夠的餘額)。

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