Go
To integrate with Go you need to make sure that your trix project has the go
bindings generation enabled in the config:
[[bindings]]plugin = "go"output_dir = "./gen/go"
With the binding generation enabled, run the following command from your CLI to trigger the code generator:
trix bindgen
If things went well, you should see the following new files:
my-protocol/└── gen/ └── go/ ├── protocol.go └── go.mod
That new protocol.go
file has the required types and functions to call your protocol from a Go code.
The go.mod
file is a standard file for Go projects.
Now, we can use the generated bindings to build a transaction using our protocol.
First access to the gen/go
folder and install the required dependencies:
cd gen/go && go mod tidy
We need to open protocol.go
and update the TRP endpoint to point to the correct URL (unless you have it configured on trix.toml). The default value is http://localhost:3000/trp
, but if you’re using different port or endpoint, make sure to update it.
For the following example, we will use the main.tx3 file generated by trix.
Now, we can create a new file called test.go
with the following code on the same folder as main.tx3
:
package main
import ( "fmt" "log"
"protocol")
func main() { // Create parameters for the transfer params := protocol.TransferParams{ Sender: "addr_test1vpgcjapuwl7gfnzhzg6svtj0ph3gxu8kyuadudmf0kzsksqrfugfc", Receiver: "addr_test1vpry6n9s987fpnmjqcqt9un35t2rx5t66v4x06k9awdm5hqpma4pp", Quantity: 100000000, }
// Execute the transfer transaction cbor, err := protocol.DefaultClient.TransferTx(params) if err != nil { log.Fatalf("Error: %v", err) }
// Print the result fmt.Printf("%+v\n", cbor)}
For this, add the protocol as a dependency in your go.mod
file:
require protocol v0.0.0
replace protocol => ./gen/go
Finally, we can run the test file to build a transaction using our protocol:
go run test.go
If everything went well, you should see a message like this:
&{Tx:84a400d9010281825820705e5d956d318 264043baf8031e250c14b8703b69947ab2d3212d67210c4b240010182a200581d60464d4cb029fc90cf720600b2f271a2d433517ad32a67eac5eb9bba5c011a05f5e100a200581d605189743c77fc84cc571235062e4f0de28370f6273ade37697d850b40011b0000000248151b86021a0005833d0f00a0f5f6 Bytes: Encoding:}