❶ 長安鏈--智能合約的開發、編譯、安裝、調用、查詢(二)
官方參考文檔: https://docs.chainmaker.org.cn/dev/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6.html
學習智能合約的鄭喚開發,通常需要有Demo來學習API的使用方式,項目組織方式。在長安鏈學習過程中也是如此,所以第一步獲取合約模塊。
1.1) 拉取鏡像: docker pull chainmakerofficial/chainmaker-go-contract:1.1.1
長安鏈為我們提供合約開發的鏡像,內部包含合約模板。
1.2) 啟動並進入容器: docker run -it --name chainmaker-go-contract -v ${PWD}:/home chainmakerofficial/chainmaker-go-contract:1.1.1 bash
啟動 chainmaker-go-contract 容器並進入,同時將當前目錄掛載到滾睜容器的 /home 目錄下
1.3) 解壓並分析合約模板
cp /home
tar xzvf contract_go_template.tar.gz
按照大叢歲官方參考文檔方式 在 chainmaker-go-contract 容器中執行 ./build.sh
生成main.wasm文件
2)執行TestUserContractHash Test方法
這里使用的是默認配置文件,如果需要改變埠、連接數、TLS使能等等,需要修改 chainmaker-sdk-go/testdata/sdk_config.yml
❷ solidity 智能合約(3):使用truffle編譯部署及測試合約
先找源碼敲一遍,跑起來,後面慢慢講怎麼用solidity編寫以太坊智能合約。
這個文件編寫在 contracts 目錄下
這個文件在 migrations 目錄下
這個文件可以創建一個 test 目錄,然後放進去,我這里直接放在了根目錄,不太規范。
要編譯Truffle項目里的合約,請切換到項目工程所在根目錄,然後在終端中鍵入以下內容:
首次運行時,將編譯所有合約。 在後續運行中,Truffle將僅編譯自上次編譯以來有更改的合約。如果我們想覆蓋此行為,可以使用 --all 選項運行上面的命令。
編譯的目標文件 Artifacts 將放在 build/contracts/ 目錄中,相對於項目根目錄(如果該目錄不存在,將創建該目錄。)
這些 Artifacts 是Truffle內部工作的組成部分,它們在成功部署應用程序中起著重要作用。 不要去編輯這些文件,因為這些文件將被合約編譯和部署覆蓋。
編譯成功後
遷移腳本(JavaScript文件)可幫助我們將合約部署到以太坊網路。 這些文件負責暫存我們的部署任務,並且假設我們的部署需求會隨著時間的推移而發生變化。 隨著項目的發展,我們將創建新的遷移腳本,以進一步推動區塊鏈的發展。 先前運行的部署記錄通過特殊的 Migrations 遷移合約記錄在鏈上,詳細信息如下。
部署命令
要運行部署,請運行以下命令:
這將部署在項目的 migrations 目錄中的所有遷移文件。 最簡單的遷移只是一組管理部署腳本。 如果我們的遷移先前已成功運行,則 truffle migrate 將從上次運行的遷移開始執行,僅運行新創建的遷移。 如果不存在新的遷移, truffle migrate 將不會執行任何操作。 我們可以使用 --reset 選項從頭開始運行所有遷移。 對於本地測試,確保在執行 migrate 之前安裝並運行了 Ganache等 測試區塊鏈。
測試腳本中輸入數值 100 ,取出的數值為 64 (這個值是16進制格式,轉為十進制就是 100 ).
❸ TP錢包波場合約怎麼編寫
要編寫TP錢包中的波場合約,需要遵循以下步驟:
在TronBox或其他合約編譯器中編寫Solidity合約代碼,然後將其編譯成ABI(Application Binary Interface)和Web3.js。
使用TP錢包中的智能合約功能,通過ABI和Web3.js將合約部署到波場網路上。
在TP錢包中選擇創建新的Dapp應用程序,並選擇波場網路作為智能殲晌合約的運行環境。
在Dapp應用程序中添加波場合約,並設好彎置激勵機制和觸發條件。
開始執行合約,並監視其狀態和執行結果。
需要注意的是,節省手續費的最佳實踐是使用enforceContractProperties選項並配置調用合約的gasLimit和gasPrice。此外,還應該遵守業界慣例,例如使用Solidity中的safeMath庫來避免整數溢出問題友改悶。
❹ 使用Nodejs部署智能合約
實現智能合約的方式很多種,可以用truffle框架來實現,編譯,部署。
這里介紹一種簡單的使用nodejs來實現,編譯,部署的方法。
創建一個nodejs項目,實現一個簡單的智能合約。
這個合約實現了一個造幣和轉幣的邏輯。
我們的合約是運行在evm上面的位元組碼,solidity是靜態語言,需要通過編譯器生成evm的位元組碼。
調用 node compile.js ,對BaseToken進行編譯,生成位元組碼。web3中提供了一個部署合約的介面,使用如下,
利用編譯生成的abi和bytecode,創建一個合約對象,然後進行發布,等待著非同步執行的方法輸出合約地址 contractAddress ,這樣就完成了部署。不過這種方式有一個問題,就是在發布合約時,你的私鑰處於聯網狀態,
處於安全策略,我們需要盡量避免私鑰在聯網狀態。
以太坊上部署合約是向空地址發送一個附有位元組碼的簽名交易,其中發送者就是這個合約的擁有者。因此我們只需要將合約構建成一筆交易,我們在無網狀態下對這筆交易進行簽名,然後將簽名發送到以太坊網路中。這樣能夠降低我們私鑰被泄漏的風險。
對合約的簽名方法如下:
以上對一個合約簽名,這里需要注意的問題是,to的地址需要是,空地址。
完成簽名之後,我們把這筆交易發送出去就好,最簡單的方法就是使用 etherscan的發送Tx的方式 ,一旦發送完成,部署完成,就可以看到合約地址。
❺ 智能合約abi弄不出來怎麼辦
一般來說,部署智能合約的步驟為:
1啟動一個以太坊節點 (例如geth或者testrpc)。
2使用solc編譯智能合約。 => 獲得二進制代碼。
3將編譯好的合約部署到網路。(這一步會消耗以太幣,還需要使用你的節點的默認地址或者指定地址來給合約簽名。) => 獲得合約的區塊鏈地址和ABI(合約介面的JSON表示,包括變數,事件和可以調用的方法)。(譯註:作者在這里把ABI與合約介面弄混了。ABI是合約介面的二進製表示。)
4用web3.js提供的JavaScript API來調用合約。(根據調用的類型有可能會消耗以太幣。)