1.Ganche 簡介
1.1.什麼是 Ganache ?
Ganache 是DApp的測試網絡,提供圖形化界面,log日誌等;智能合約部署時需要連接測試網絡。
Ganache 是一個運行在本地測試的網絡,通過結合cpolar內網穿透軟件,即可比較簡單實現遠程或者不同局域網進行連接訪問,下面簡單概括設置和連接方法
1.2.環境要求和安裝
進入官網:https://trufflesuite.com/ganache/,我們下載對應的電腦系統的版本,下載安裝包後,直接安裝即可
安裝完成後,我們打開Ganache,即可看到默認爲我們生成了許多測試的地址,這些地址都是虛假的,在頂部,我們可以看到RPC服務本地連接地址,端口爲:7545
1.3.Truffle 部署
修改truffle-config.js:
部署合約: truffle migrate --network dev
Deploying 'TriplecMedal'
------------------------
> transaction hash: 0x54722fd58a4e4d0f2c1c768da8f1307f757f80c99e73374a5d8c7912713c6f4a
> Blocks: 0 Seconds: 0
> contract address: 0xE7C12f2ab7CEAED9E173943180E0e0EfDF6Bc5d4
> block number: 1
> block timestamp: 1706779598
> account: 0x5fA043293aAB29EC4bd3F40623fAF06E501d160c
> balance: 99.9845385175
> gas used: 4581180 (0x45e73c)
> gas price: 3.375 gwei
> value sent: 0 ETH
> total cost: 0.0154614825 ETH
1.4.Ganache查看部署的合約
1.5. 使用abigen生成go代碼
生成完整合約代碼:
truffle-flattener ./contracts/medal/TriplecMedalV3.sol --output ./deployment/TriplecMedalV3.full.sol
生成abi文件
solc --abi --bin -o ../build --overwrite TriplecMedalV3.full.sol
生成go代碼
abigen --bin=../build/TriplecMedalV3.bin --abi=../build/TriplecMedalV3.abi --pkg=TriplecMedalV3 --out=../script/TriplecMedalV3/TriplecMedalV3.go
1.6. 使用go代碼進行合約測試
package main
import (
"fmt"
"script/TriplecMedalV3"
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
)
func TestInitialize(t *testing.T) {
client, err := ethclient.Dial(config.ServerAddress)
if err != nil {
panic(err)
}
privateKey, err := crypto.HexToECDSA(config.OwnerPrivateKey)
if err != nil {
panic(err)
}
auth, err := Author(privateKey, client, 500000, 0, 0)
if err != nil {
panic(err)
}
medal, err := TriplecMedalV3.NewTriplecMedalV3(common.HexToAddress(config.ContractAddress), client)
if err != nil {
panic(err)
}
tx, err := medal.Initialize(auth, common.HexToAddress(config.OwnerPublicKey))
if err != nil {
panic("error")
}
if tx == nil {
panic("error")
}
hash := tx.Hash().Hex()
fmt.Printf("setsigner 的hash:%v", hash)
}