在創(chuàng)建一個(gè)Node.js項(xiàng)目后,我們可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的智能合約,它可以完成「造幣」和「轉(zhuǎn)幣」等邏輯。由于Solidity是靜態(tài)語(yǔ)言,我們需要使用編譯器將其轉(zhuǎn)換成運(yùn)行在以太坊虛擬機(jī)(EVM)上的字節(jié)碼,再通過(guò)web3提供的部署合約接口進(jìn)行發(fā)布。
具體實(shí)現(xiàn)方法如下:
1. 調(diào)用Node.js的編譯腳本(compile.js),對(duì)BaseToken進(jìn)行編譯,并生成相應(yīng)的字節(jié)碼。
2. 利用編譯生成的ABI(Application Binary Interface)和bytecode創(chuàng)建一個(gè)合約對(duì)象,然后進(jìn)行發(fā)布。部署過(guò)程中,我們需要等待異步執(zhí)行的方法輸出合約地址。
但是這種方式存在一個(gè)安全問(wèn)題,即在發(fā)布合約時(shí)需要將私鑰處于聯(lián)網(wǎng)狀態(tài)。為了避免私鑰被泄漏,我們可以考慮在無(wú)網(wǎng)狀態(tài)下進(jìn)行簽名,然后將簽名發(fā)送到以太坊網(wǎng)絡(luò)中。
對(duì)合約的簽名方法如下:
1. 將合約構(gòu)建成一筆交易,其中收款地址為「空地址」。
2. 在無(wú)網(wǎng)狀態(tài)下對(duì)這筆交易進(jìn)行簽名(可以使用MetaMask或其他工具),獲得簽名后的交易數(shù)據(jù)。
3. 將簽名后的交易數(shù)據(jù)發(fā)送到以太坊網(wǎng)絡(luò)中,完成部署過(guò)程。
最簡(jiǎn)單的方式是使用Etherscan的發(fā)送TX的方式進(jìn)行部署,一旦發(fā)送完成,就可以得到合約地址。
需要注意的是,在對(duì)合約進(jìn)行簽名時(shí),收款地址需要填寫(xiě)「空地址」。這樣,我們就能夠降低私鑰被泄漏的風(fēng)險(xiǎn),并且安全地部署智能合約。