時間:2023-08-17|瀏覽:267
智能合約地址的生成邏輯: 合約地址是根據創建者(sender)的地址以及創建者發送過的交易數量(nonce)來計算確定的。sender和nonce進行RLP編碼,然后用Keccak-256進行hash計算。
使用Solidity代碼: //nonce為0時生成的地址 nonce0 = address(keccak256(0xd6, 0x94, address, 0x80)) nonce1 = address(keccak256(0xd6, 0x94, address, 0x01))
通過上面的邏輯,我們知道了【智能合約的地址并不是通過私鑰來生成的】,也就是說這個地址的私鑰即使對于合約的創建者都沒有辦法知道,因為我們沒有辦法通過地址反向推導出私鑰。
用戶和智能合約交互: 那么用戶怎么和智能合約進行交互呢?首先智能合約就是一段預先編寫好的程序,部署在區塊鏈上。雖然我們沒有私鑰去直接操作合約地址里面的資產,但是可以通過合約程序定義的方法和合約進行互動。以【卡俄斯Chaos】智能合約為例,最核心的有三個方法:
1. 兌換母幣:張三通過往智能合約地址轉入TRX,智能合約通過預先制定的兌換比例返還一定數量的母幣給她。此時智能合約地址里面就有了TRX資產,但是沒有任何人能直接將TRX資產通過私鑰轉移走,因為壓根兒就沒有私鑰。
2. 質押挖礦:李四用他兌換來的母幣質押進智能合約,一定時間過后,智能合約根據預先制定的規則就會挖出一定數量的子幣發送給李四。任何人沒有辦法直接獲取到子幣,當然收到的子幣可以到二級市場自由買賣。
3. 兌現子幣:王五將自己挖到的子幣發送到智能合約,智能合約根據預先定義的規則按照一定比例,將對應的TRX資產發送給王五。智能合約地址里面的TRX資產除了這一種方法外,沒有其他任何途徑將TRX資產拿走。
如果保證智能合約里面資金的安全: 上面我們講到了,用戶如何和智能合約交互,也就是用戶調用智能合約的方法,從而實現TRX資金的進出。那么有人會問,合約的創建者預先留一個套取TRX資金的合約方法,不就可以隨意拿取合約地址里面的TRX資金了?事實上,是完全可以的。那么怎么保障所有參與智能合約者的利益呢?答案就是下面兩個途徑:
1. 智能合約代碼審計:通過專業的第三方合約審計機構,進行代碼審計,確保合約沒有留后門,確保項目邏輯和源碼一致,確保沒有安全漏洞,防范黑客攻擊。
2. 智能合約代碼公開:在官方區塊鏈瀏覽器上完全公開智能合約的代碼,確保項目宣傳和代碼邏輯一致,確保智能合約代碼人人可見,人人可以審計,沒有留后門,沒有安全漏洞。如果不信任第三方審計的人,可以根據完全公開的源碼自己找值得信任的人或任何機構再次進行合約代碼審計。
以下就是【卡俄斯Chaos】智能合約在官方區塊瀏覽器源碼驗證通過的截圖,確保源碼和正在運行的智能合約完全匹配。智能合約在波場的完全代碼認證能過,合約是否完全開源就看是否有綠色,沒有就是假開源。同時,是所有業務邏輯源碼公開,還是只公開標準代幣源碼,區別也很大。