Custom Contracts
Custom Contracts
With the thirdweb SDK, you can get a contract instance for any contract. Additionally, if you deployed your contract using thirdweb deploy, you can get a more explicit and intuitive interface to interact with your contracts.
# Getting a Custom Contract Instance
Let's take a look at how you can get a custom contract instance for one of your contracts deployed using the thirdweb deploy flow:
import (
    "github.com/thirdweb-dev/go-sdk/v2/thirdweb"
)
privateKey := "..."
secretKey := "..."
sdk, err := thirdweb.NewThirdwebSDK("mumbai", &thirdweb.SDKOptions{
    PrivateKey: privateKey,
    SecretKey: secretKey
})
// You can replace your own contract address here
contractAddress := "{{contract_address}}"
// Now you have a contract instance ready to go
contract, err := sdk.GetContract(contractAddress)
Alternatively, if you didn't deploy your contract with thirdweb deploy, you can still get a contract instance for any contract using your contracts ABI:
import (
    "github.com/thirdweb-dev/go-sdk/v2/thirdweb"
)
privateKey = "..."
sdk, err := thirdweb.NewThirdwebSDK("mumbai", &thirdweb.SDKOptions{
    PrivateKey: privateKey,
})
// You can replace your own contract address here
contractAddress := "{{contract_address}}"
// Add your contract ABI here
abi := "[...]"
// Now you have a contract instance ready to go
contract, err := sdk.GetContractFromAbi(contractAddress, abi)
# Calling Contract Functions
Now that you have an SDK instance for your contract, you can easily call any function on your contract with the contract "call" method as follows:
// The first parameter to the call function is the method name
// All other parameters to the call function get passed as arguments to your contract
balance, err := contract.Call("balanceOf", "{{wallet_address}}")
// You can also make a transaction to your contract with the call method
tx, err := contract.Call("mintTo", "{{wallet_address}}", "ipfs://...")
type SmartContract struct {
    Helper  *contractHelper
    Encoder *ContractEncoder
    Events  *ContractEvents
    ERC20   *ERC20
    ERC721  *ERC721
    ERC1155 *ERC1155
}
func (*SmartContract) Call
func (c *SmartContract) Call(ctx context.Context, method string, args ...interface{}) (interface{}, error)
Call any function on your contract.
method: the name of the method on your contract you want to call
args: the arguments to pass to the method
Example
// The first parameter to the call function is the method name
// All other parameters to the call function get passed as arguments to your contract
balance, err := contract.Call("balanceOf", "{{wallet_address}}")
// You can also make a transaction to your contract with the call method
tx, err := contract.Call(context.Background(), "mintTo", "{{wallet_address}}", "ipfs://...")
type SnapshotClaim
type SnapshotClaim struct {
    Address      string   `json:"address"`
    MaxClaimable int      `json:"maxClaimable"`
    Proof        []string `json:"proof"`
}
type SnapshotEntry
type SnapshotEntry struct {
    Address         string `json:"address"`
    MaxClaimable    string `json:"maxClaimable"`
    Price           string `json:"price"`
    CurrencyAddress string `json:"currencyAddress"`
}
type SnapshotEntryWithProof
type SnapshotEntryWithProof struct {
    Address         string
    MaxClaimable    string
    Price           string
    CurrencyAddress string
    Proof           [][32]byte
}
type SnapshotInfo
type SnapshotInfo struct {
    MerkleRoot string          `json:"merkleRoot"`
    Claims     []SnapshotClaim `json:"claims"`
}
type SnapshotInfos
type SnapshotInfos struct {
    Snapshot    SnapshotInfo
    MerkleRoot  string
    SnapshotUri string
}
type SnapshotInput
type SnapshotInput struct {
    Address      string
    MaxClaimable int
}