---
# System prepended metadata

title: Solidity 編譯、部署、調用
tags: [BlockChain]

---

---
title: Solidity 編譯、部署、調用
---
# Solidity 編譯、部署、調用

###### tags: `BlockChain`

程式碼：
> https://github.com/ronnielin8862/solidity-practice/tree/master/cmd/testGetAndPut

主要參考文章：
>https://goethereumbook.org/transaction-raw-create/

## 坑點說明：

1.編譯
---
* brew安裝上除了內文提到的solidity,還要安裝ethereum，不然會找不到abigen的指令。 (浪累我三小時在找怎麼安裝abigen的方法)
* 編譯時文章中的abi、bin編譯，並沒有正常產出對應文件，要自己編譯後放入，且編譯後出來的內容要自行去掉表頭。 (照文章做沒有產出對應；將編譯出來的資料放進去沒去表頭，兩個浪費我四、五個小時在錯誤的方向試圖解決錯誤訊息)
* abigen指令中的pkg參數會改變編譯後的某些methon name，建議參數用這合約的名稱，後面比較好找。 (浪費我兩小時在那邊找文章內沒有的method name，找不到又懷疑是編譯過程操作有誤導致，讓我重新編譯新的.sol檔案。 浪費三四個小時)

2.部署
---
* 使用容易取測試幣的ropsten，不會被其他智障的測試幣浪費一堆時間，要你去推特推廢文。 (在其他智障測試幣上取半天取不到，換個測試幣還是一樣，跟同事討論以後建議我用側鏈做測試。  然後發現轉以太到測試鏈要六百塊。  後來才在小天才建議下用rop可以直接領的測試幣。  浪費我半天時間)_
* 文內建議的GasLimit太少，至少在測試鏈上我連續交易失敗都因gas不足。建議多加一個0，節省你寶貴時間。 (交易失敗以後把limit加了兩個0，還是失敗，結果再查才知道也不能給太多。)


3.調用
---
* 修改參數之類行為，需要等待區塊鏈生成，因此不像是在remix vm中那樣即時。可以到ropsten scan觀察。

## 文章沒提到的:
1. 申請infura:
沒特別困難，就是把申請完帳號的節點貼進來使用  (申請之前自己本地起節點，用了三四個小時，結果可以用web3查餘額，卻不能用golang跟節點正常互動。  然後才又轉到infura...)

2. 調用部署區塊鏈上的智能合約：
要先將該合約程式碼複製下來，編譯成.go以後提供main方法調用裡面的method。 (這塊浪費我超級無敵久時間，卡了整整一兩天的時間在網上狗資源，都沒人提到要先去複製程式碼自己編譯這一點。)

## 使用姿勢：
平常合約編譯建議在remix透過VM確認執行無誤，再透過golang編譯部署到側鏈或測試鏈，做測試環境與正式環境幾乎相同的類似UAT的測試。 都沒問題才算完成一個合約。