以太坊合約位址是如何生成的

2021-10-06 05:39:35 字數 1262 閱讀 6865

我們在以太坊上建立乙個合約時,新生成的合約的位址是根據傳送者(sender)的位址和其已生成的事務數(nonce)確定的,經過rlp編碼後再hash( keccak-256)運算得出的。具體的nodejs**如下:

var util =

require

('ethereumjs-util');

//根據傳送者位址和nonce求取生成的新合約的位址

//方法一:先rlp編碼,再hash,擷取hash值的後20個位元組

var sender =

"a990077c3205cbdf861e17fa532eeb069ce9ff96"

;var nonce =0;

//由於rlp編碼規則,當nonce==0時,rlp編碼要使用null

var buf =

[buffer.

from

(sender,

"hex"

), nonce ==0?

null

: nonce]

;var addr1 = util.

sha3

(util.rlp.

encode

(buf)).

tostring

("hex").

slice(-

40);console.

log(addr1)

;//方法二

var addr2 = util.

generateaddress

(buffer.

from

(sender,

"hex"

), nonce)

.tostring

("hex");

console.

log(addr2)

;

假設(sender = 「a990077c3205cbdf861e17fa532eeb069ce9ff96」)時,執行的結果如下:

nonce=0,1820a4b7618bde71dce8cdc73aab6c95905fad24

nonce=1,7faad426db1e8a79173400c5e0914b28f9ff4412

nonce=2,74e474ba81c7d71f23ca9165113b84ed25b82bb0

也就是說合約的位址是可以預先獲知的,這有時候很有用。比如:當我們想把乙個合約部署到乙個固定的位址上時,我們可以通過使用指定的sender和nonce就可以做得到。比如:eip1820和eip 2470正是這麼做的。

以太坊智慧型合約位址生成之CREATE指令

以太坊智慧型合約位址生成是有規則的,是可以提前 的。底層在虛擬機器段是用create命令生成智慧型合約位址的,當然後來虛擬機器公升級有新增了create2指令來生成智慧型合約位址,後面會再寫一篇測試create2.為了驗證效果,寫了如下 如果好奇心強烈,可以自行新增測試用例測試一下 根據rlp編碼規...

什麼是以太坊?什麼是智慧型合約?

以太坊智慧型合約 以太坊是乙個分布式的計算平台。它會生成乙個名為ether的加密貨幣。程式設計師可以在以太坊區塊鏈上寫下 智慧型合約 這些以太坊智慧型合約會根據 自動執行。以太坊經常與位元幣相提並論,但情況卻有所不同。位元幣是一種加密貨幣和分布式支付網路,允許位元幣在使用者之間轉移。相關 什麼是位元...

以太坊的智慧型合約是如何工作的?

與區塊鏈行業的許多想法一樣,一種普遍的困惑籠罩著 智慧型合約 智慧型合約是一種由公共區塊鏈實現的新技術,它很難理解,因為這個術語在一定程度上混淆了所描述的核心互動。標準合同概括了一種關係的條款 通常是法律可以強制執行的 而智慧型合約則是用密碼加密的一種關係。換句話說,智慧型合約是完全按照其建立者所設...