Deploy Contract
Deploy Contract to EthSepolia
This is tutorial for deploy contract to public chain.
warning
- It does not work on non-Ethernet compatible networks.
You can get full-code here:
1. Setup
mkdir deploy-contract
cd deploy-contract
go mod init example.com/example/deploy-contract
mkdir contracts
mkdir build
mkdir abi
for example:
deploy-contract
├── build
├── abi
├── contracts
└── go.mod
2. Write Contract by Solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >0.7.0 < 0.9.0;
/**
* @title Storage
* @dev store or retrieve a variable value
*/
contract Storage {
uint256 value;
function store(uint256 number) public{
value = number;
}
function retrieve() public view returns (uint256){
return value;
}
}
3. Compile Contract
solc --combined-json abi,bin contracts/Storage.sol > build/Storage.abi
4. Generate Abi
abigen --v2 --combined-json build/Storage.abi --pkg abi --type Storage --out abi/Storage.go
You get golang code.
deploy-contract
├── abi
│ └── Storage.go
├── build
│ └── Storage.abi
├── contracts
│ └── Storage.sol
├── go.mod
└── go.sum
And install dependency.
go mod tidy
5. Write Code to Deploy Contract
go get -u github.com/poteto-go/go-alchemy-sdk
You can easily deploy contract by metaData.
package main
import (
"fmt"
"github.com/poteto-go/go-alchemy-sdk/gas"
"github.com/poteto-go/go-alchemy-sdk/types"
"github.com/poteto-go/go-alchemy-sdk/wallet"
"github.com/poteto-go/tutorial-deploy-contract/abi"
)
func main() {
setting := gas.AlchemySetting{
ApiKey: "<apiKey>",
Network: types.EthSepolia,
}
alchemy := gas.NewAlchemy(setting)
w, err := wallet.New("<privateKey>")
if err != nil {
panic(err)
}
w.Connect(alchemy.GetProvider())
address, err := w.DeployContract(&abi.StorageMetaData)
if err != nil {
panic(err)
}
fmt.Println(address)
}