使用Ganche和Truffle部屬合約與.Net Core串接溝通
參考網址:
掃文資訊
https://tw.saowen.com/a/672947e63778f1dbe0c5c8ea8c6e240866399399225046bb9bc089401a2877e1
1.安裝Ganache及Truffle
1. https://truffleframework.com/ganache
2. 我是Windows,所以使用PowerShell做安裝
npm install -g truffle
備註:如果沒有npm,請至node.js做安裝下載
2.建立合約與部屬合約
1.首先先在桌面建立一個資料夾,例如我就隨便輸入,這是空的資料夾喔
2.開啟PowerShell , cd到truffle_test資料夾
3.在這資料夾下輸入
truffle init
4.則會建立起truffle基本專案,之後我們回到truffle_test資料夾去找contracts資料夾
5.開始撰寫我們的智能合約 副檔名.sol
6.以下是我寫的相關合約,但錯了別怪我 , 在寫智能合約時,請注意truffle他們用的版本 , 所以我才參考他初始專案所使用的pragma
也可以使用remix https://remix.ethereum.org 或是 ethfiddle https://ethfiddle.com/ 做驗證
deposit : 是我要打錢給這合約的方法
getAward: 是我希望前端給我地址,還有抽中的球,如果是1得到0.01 ether,以此類推
7. 之後存完檔後,請移駕去 migrations ,建立2_xxx.js
請輸入以下,這是我參考改寫的
var weiya = artifacts.require("weiya");
module.exports = function(deployer) {
// deployment steps
deployer.deploy(weiya);
};
8. 完成後,我們在回到上一層truffle_test資料夾,去尋找truffle-config.js
9.開啟他,並在他的底下去增加 , 與ganache對接
ganache: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Match any network id
}
10.完成後,請回到powershell , 輸入Truffle 指令 , ganache則是剛才truffle-config.js 所設定的network , 發佈智能合約
truffle deploy --reset --network ganache
11. 之後會產生出這當初寫的合約地址等 , 例如
而使用的地址耗費都是使用Ganache 第一個地址去做消耗
在此先暫停一下
1.如果將錢打進合約內
1.發佈完成合約地址後 , 前往https://remix.ethereum.org/ 網站
2.安裝 MetaMask , 並登入開啟
3.選擇右上角,並按下Custom RPC
4. 寫上你的RPC server , 在你的Ganache
5.儲存完成後,即可以跟他連接,並且可以import 一個Account進入
複製Ganache一個裡面的私鑰
6.完成後回到Remix網站 , 他會連接到你的metamask 對應的,並且連接到我們的Ganache , 在此輸入我們的合約地址
7.此時會跳出我們寫的方法,就可以利用這幾個來讓我們給合約錢,要給合約錢,我們才可以用合約發錢
8.當我改成 2 eth 發送,並且 按下 deposit
9. metamask會跳出一個付款選項 , 請確認付款
10. 同意後,即可完成合約打錢
11. 此時我們的 Ganache則會多增加一筆在blocks上
繼續回到主題
使用.Net Core與發佈上的智能合約串接
1. 首先建立 .net core Console 或是 .net core Web之類的
2.這邊使用nuget 安裝兩個套件 , 他似乎還有很多套件可以用
3.
string url = "HTTP://localhost:7545"; //RPC server
string address = "0xe024aB03be7b";//故意縮短的,這是合約地址
string ABI ="XXXXX";//這是合約上的ABI
暫停一下,在此又會有人不知道ABI
什麼是ABI?發行代幣也就是部署一個智能合約, 簡單來説ABI就是智能合約的API接口
要怎麼給
所以我們回到truffle_test資料夾,並且對contracts資料夾點擊右鍵,使用Visual Studio Code 開啟 , 記得安裝套件 solidity
安裝完成後,請針對你的sol檔案,按下 F1 , 並且輸入Solidity , 就可以Compile出一個bin資料夾 , 裡面有compile-all-output.json
請只要複製abi內的東西就好
這是我的VS 程式內部所寫
4.接著我們繼續 使用Web3連接並且連接合約
Web3 web3 = new Web3(url);
Contract voteContract = web3.Eth.GetContract(ABI, address);
5. 呼叫方法 並且給予gas value , gas value後面則是合約內方法的參數 , gas是上鏈需要用的燃料費才能上到鍊,Value則是我要給合約多少錢
6.即可以發送完成,會回傳string 回來,給予Hash
備註:剛有參考一些網站,有粗估合約所需gas 的方法,所以使用了以下
參考網址:
https://hk.saowen.com/a/7e3950b5df5b2edcfa29044faa8a44ce83130a4177fe409c7331f69a0bfabfa3
https://gitter.im/Nethereum/Nethereum
https://github.com/Nethereum/Nethereum
https://nethereum.readthedocs.io/en/latest/Nethereum.Workbooks/docs/nethereum-smartcontrats-untyped/ 主要
https://github.com/Nethereum/Nethereum.Workbooks/blob/master/docs/nethereum-smartcontrats-untyped.workbook