Endless provides an official Go SDK in the repository. To use the Go SDK, get the main package here:
go get github.com/endless-labs/endless-go-sdk
You can additionally add the bcs or crypto libraries
go get github.com/endless-labs/endless-go-sdk/bcs
go get github.com/endless-labs/endless-go-sdk/crypto
Using the Go SDK
Creating a client
You can create a client by importing the endless-go-sdk, and creating a Client
package example
import (
github.com/endless-labs/endless-go-sdk
)
func test() {
client, err := endless.NewClient(endless.TestnetConfig)
if err != nil {
panic("Failed to create client:" + err.Error())
}
}
You can configure the network with the endless.NetworkConfig, or use a preexisting endless.DevnetConfig, endless.TestnetConfig, or endless.MainnetConfig
Creating a private key
You can create a new Ed25519 account's private key by calling NewEd25519Account().
account, err := endless.NewEd25519Account()
if err != nil {
panic("Failed to create sender:" + err.Error())
}
Funding accounts
You can create and fund an account with a faucet on any network that is not mainnet
account, err := endless.NewEd25519Account()
if err != nil {
panic("Failed to create sender:" + err.Error())
}
err = client.Faucet(*account, endless.SequenceNumber(0)) // Use the sequence number to skip fetching it
if err != nil {
panic(fmt.Sprintf("Failed to fund account %s %w", account.AccountAddress(), err))
}
Sending a transaction
You can send a EndlessCoin via a transaction
// 1. Build transaction
entryFunction, err := endless.CoinTransferPayload(nil, endless.AccountOne, 100)
if err != nil {
panic("Failed to build transfer payload:" + err.Error())
}
rawTxn, err := client.BuildTransaction(
account.AccountAddress(),
endless.TransactionPayload{
Payload: entryFunction,
},
)
if err != nil {
panic("Failed to build transaction:" + err.Error())
}
// 2. Sign transaction
signedTxn, err := rawTxn.SignedTransaction(account)
if err != nil {
panic("Failed to sign transaction:" + err.Error())
}
// 3. Submit transaction
submitResult, err := client.SubmitTransaction(signedTxn)
if err != nil {
panic("Failed to submit transaction:" + err.Error())
}
txnHash := submitResult.Hash
// 4. Wait for the transaction to complete
userTransaction, err := client.WaitForTransaction(txnHash)
if err != nil {
panic("Failed to wait for transaction:" + err.Error())
}
if !userTransaction.Success {
panic("Failed to on chain success:" + userTransaction.VmStatus)
}
fmt.Printf("The transaction completed with hash: %s and version %d\n", userTransaction.Hash, userTransaction.Version)
More examples
You can see more examples in the of the Go SDK repository