El kit de desarrollo TronTool.Go es adecuado para agregar rápidamente soporte para activos digitales Tron / USDT-TRC20 a aplicaciones Go, es decir, admite escenarios de aplicación utilizando su propio nodo de cadena de bloques Tron y también admite servicios API públicos oficiales Tron ligeros Escenario de implementación. Dirección de descarga oficial: TronTool para Golang .
1. Descripción general del kit de desarrollo
El kit de desarrollo TronTool.Go incluye principalmente las siguientes características:
- Admite transacciones Trx nativas de blockchain de Tron
- Admite contratos inteligentes de Tron y tokens TRC20, como USDT-TRC20, etc.
- Admite la firma de transacciones fuera de línea para evitar la divulgación de claves privadas
- Paquete completo de API de nodo Tron, compatible con API proporcionadas por nodos completos, nodos Solidity y nodos de eventos
- Apoyar el uso de nodos propios o nodos de terceros, como nodos públicos proporcionados oficialmente por Tron
El kit de desarrollo TronTool.Go se desarrolla utilizando Go 1.13 , la versión actual es 1.0.0 y los principales tipos de datos y relaciones se muestran en la siguiente figura:
La lista de archivos de código principal del kit de desarrollo TronTool.Go es la siguiente:
Archivo de código | Descripción |
---|---|
trontool / tron / address.go | Método de codificación y decodificación de direcciones Tron |
trontool / tron / contract.go | Clase de embalaje por contrato Tron |
trontool / tron / credential.go | Clase de identidad Tron |
trontool / tron / nodeclient.go | Clase de cliente del nodo Tron |
trontool / tron / trc20.go | Clase de embalaje por contrato TRC20 |
trontool / tron / tronapi.go | Cliente Tron multinodo |
trontool / tron / tronkit.go | Clase de entrada TronKit |
trontool / tron / types.go | Tipos varios |
trontool / api / account.go | Estructura de datos de la API relacionada con la cuenta |
trontool / api / apiresult.go | Estructura API general |
trontool / api / contract.go | Estructura de datos de API relacionada con el contrato |
trontool / api / contractevent.go | Estructura de datos API relacionada con eventos contractuales |
trontool / api / contracttransaction.go | Estructura de datos API relacionada con transacciones contractuales |
trontool / api / transaction.go | Estructura de datos API relacionada con transacciones TRX |
trontool / demo / addressdemo.go | Demostración de direcciones de Tron |
trontool / demo / trc20demo.go | Demostración de transacciones y consultas TRC20 |
trontool / demo / trc20eventdemo.go | Demostración de consulta de eventos TRC20 |
trontool / demo / trxdemo.go | Demostración de transacción de transferencia y consulta de saldo de trx |
trontool / go.mod | Ir a los archivos de gestión del módulo |
trontool / go.sum | Ir a los archivos de gestión del módulo |
manifestación/ | Directorio de código del proyecto de demostración |
demo / build.gradle | Archivo de configuración de Gradle del proyecto de demostración |
demo / src / main / java / demo / NewAddressDemo.java | Código de demostración para crear una nueva dirección de cadena de bloques de Tron |
demo / src / main / java / demo / TrxDemo.java | Código de demostración, transacción de transferencia Trx y consulta de saldo |
demo / src / main / java / demo / Trc20Demo.java | Código de demostración, transferencia de token Trc20, consulta de saldo, monitoreo de eventos, etc. |
build.gradle | Archivo de configuración del proyecto raíz |
settings.gradle | Archivo de configuración del proyecto raíz |
2. Usa código de muestra
Ingrese al trontool
directorio para ejecutar el código de muestra.
2.1 Crear una nueva dirección
El código de muestra addressdemo.go
demuestra cómo crear una nueva dirección o importar una clave privada existente.
Ejecute el siguiente comando para ejecutar el código de muestra:
go run demo/addressdemo.go
Los resultados son los siguientes:
2.2 Transferencia TRX y consulta de saldo
El código de muestra trxdemo.go
demuestra cómo consultar las transferencias Tron TRX especificadas y los saldos de cuenta TRX.
Ejecute el siguiente comando para ejecutar el código de muestra:
go run demo/trxdemo.go
Los resultados son los siguientes:
2.3 Transferencia de tokens trc20 y consulta de saldo
El código de muestra trc20demo.go
demuestra cómo consultar la información especificada en los tokens y transferencias TRC20.
Ejecute el siguiente comando para ejecutar el código de muestra:
go run demo/trc20demo.go
Los resultados son los siguientes:
2.4 Consulta de evento de token TRC20
El código de muestra trc20eventdemo.go
demuestra cómo consultar especifica el evento de tokens TRC20.
Ejecute el siguiente comando para ejecutar el código de muestra:
go run demo/trc20eventdemo.go
Los resultados son los siguientes:
3 使用 使用 TronKit
TronKit es la entrada al kit de desarrollo. El uso de esta clase puede implementar rápidamente las siguientes funciones:
- Transferencia trx y consulta de saldo
- Transferencia de tokens trc20, autorización, consulta de saldo, etc.
3.1 Crear una instancia de TronKit
La instanciación de TronKit necesita pasar el TronApi
objeto y el Credential
objeto. Estos dos parámetros encapsulan respectivamente la API proporcionada por el nodo Tron y la información de identidad del usuario para la firma de transacciones.
Por ejemplo, el siguiente código crea una instancia de TronKit conectada a la cadena principal de Tron y usa la clave privada especificada para firmar la transacción:
//import "trontool/tron"
credential, _ := tron.HexKeyToCredential("8D914…71EB5F") //导入私钥
TronKit kit = tron.NewTronKit(
Tron.MainNetTronApi(), //接入主链
credential, //使用指定身份
)
3.2 Transferencia TRX y consulta de saldo
Utilice el sendTrx()
método de TronKit para la transferencia de Trx, por ejemplo, envíe 1000 TRX:
//import "fmt"
//import "trontool/tron"
to := "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx" //转账目标地址
var amount int64 = 1000000000 //转账金额,单位:SUN
ret,_ := kit.SendTrx(to,amount) //提交Trx转账交易
fmt.Printf("tx id: %s\n", ret.TxId) //显示交易ID
fmt.Printf("tx state: %b\n", ret.State) //显示交易提交结果
Nota: Necesita convertir la unidad de cantidad a SUN, 1 TRX = 1000000 SUN.
Utilice el getTrxBalance()
método para consultar el saldo de TRX de la dirección especificada, por ejemplo:
addr := "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx" //要查询的Tron地址
balance := kit.GetTrxBlanace(addr) //查询Trx余额,单位:SUN
fmt.Printf("balance: %d\n",balance) //显示余额
3.3 Transferencia de token TRC20
Utilice el Trc20()
método del objeto TronKit para obtener una instancia del contrato de token TRC20 especificado y luego llame al transfer()
método del contrato para transferir el token TRC20.
Por ejemplo, el siguiente código transfiere 13,15,300 unidades mínimas de tokens TRC20-USDT entre direcciones específicas, que es 1.3153 USDT:
//import "trontool/tron"
//import "math/big"
to := "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx" //转账目标地址
value := big.NewInt(1315300) //转账Trc20代币数量
contractAddress := "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t" //USDT代币地址
usdt, _ := kit.Trc20(contractAddress) //创建Trc20代币合约实例
ret,_ := usdt.Transfer(to, value) //转账Trc20代币
fmt.Printf("tx id: %s\n",ret.txId) //显示转账交易ID
fmt.Printf("tx state: %b\n",ret.state) //显示转账交易结果
3.4 Consulta de saldo del token TRC20
Utilice el Trc20()
método del objeto TronKit para obtener la instancia de contrato del token TRC20 especificada y luego llame al BalanceOf()
método del contrato para consultar el saldo del token TRC20 de la dirección especificada.
Por ejemplo, el siguiente código consulta el saldo del token USDT de la dirección especificada:
//import "trontool/tron"
//impot "math/big"
usdt,_ := kit.Trc20("TR7NhqjeK…zgjLj6t") //创建USDT-TRC20代币实例
balance,_ := usdt.BalanceOf("TDN3Q…8qwqx") //查询Trc20代币余额
fmt.Printf("balance: %s\n",balance) //显示代币余额
3.5 Consulta de evento de token TRC20
Utilice el Trc20()
método del objeto TronKit para obtener la instancia de contrato de token TRC20 especificada y luego llame al GetEvents()
método de contrato para consultar el evento desencadenante del contrato especificado.
Por ejemplo, para consultar los eventos del contrato de token USDT en los últimos 10 segundos:
//import "trontool/tron"
//import "time"
//import "fmt"
usdt,_ := kit.Trc20("TR7Nhqje…zgjLj6t") //创建Trc20代币合约实例
since := time.Now().Unix()*1000 - 10000 //计算检查时间点
events,_ := usdt.GetEvents(since) //提取合约事件
for _,event := range events {
fmt.Printf("event name: %s\n",e.EventName) //显示事件名称
fmt.Printf("block height: %d\n",e.BlockNumber) //显示事件触发区块高度
}
4. Identidad de la cadena de bloques de Tron y representación de direcciones
En el kit de desarrollo, Credential
se usa la identidad de un usuario en la cadena de bloques de Tron para caracterizarlo. La diferencia con la dirección es que Credential contiene la información de la clave privada del usuario, que se puede usar para firmar transacciones, mientras que la dirección es información que se puede revelar.
4.1 Crear una nueva identidad de cuenta
Utilice el NewCredential()
método del paquete tron para crear una nueva cuenta. Por ejemplo, el siguiente código crea una nueva cuenta y muestra su clave privada, clave pública y dirección:
//import "fmt"
//import "trontool/tron"
c,_ := tron.NewCredential() //创建新身份
fmt.Printf("private key: %s\n",c. PrivateKeyHex()); //显示私钥
fmt.Printf("public key: %s\n",c. PublicKeyHex()); //显示公钥
fmt.Printf("address: %s\n",c.AddressBase58()); //显示地址
Cabe señalar que para cualquier cuenta recién creada, Tron requiere que se inyecte 0.1 TRX para activarla antes de que pueda usarse. Para obtener instrucciones específicas, consulte Cómo crear una cuenta .
4.2 Utilice la clave privada existente para crear una identidad
Puede utilizar el método del paquete para HexKeyToCredential()
importar la clave privada existente para crear una instancia de la Credencial.
Por ejemplo, el siguiente código importa la clave privada existente y muestra la dirección:
//Import "fmt"
//import "trontool/tron"
c,_ := tron.HexKeyToCredential("7889...023a") //导入已有私钥
fmt.Printf("address: %s\n",c. AddressBase58()) //显示相应地址
4.3 Dos representaciones de la dirección de Tron
En la cadena de bloques de Tron, las direcciones tienen dos representaciones: representaciones hexadecimales y base58. Por ejemplo, las siguientes son dos representaciones de la misma dirección:
- base58 : TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
- Hexadecimal: 412539EF4F3EB733C105A957EEBB20FD60AD8C9A43
Los métodos de codificación y decodificación correspondientes se proporcionan en el paquete tron, que se puede convertir entre los dos formatos. P.ej:
//import "fmt"
//import "trontool/tron"
a1,_ := tron.DecodeBase58Address("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");
fmt.Println(a1) //输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43
a2,_ := := tron.EncodeHexAddress("412539EF4F3EB733C105A957EEBB20FD60AD8C9A43")
fmt.Println(a2) //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
5. Utilice TronApi
Utilice TronApi
ejemplos para acceder a las distintas API de nodo de Tron. TronApi agrega las API proporcionadas por múltiples nodos de Tron, como las API de los nodos completos de tron, los nodos de solidez y los nodos de servicio de eventos.
5.1 Creación de instancias de TronApi
Al crear una instancia de TronApi, puede especificar diferentes URL de conexión para diferentes tipos de nodos de Tron, por ejemplo:
//import "trontool/tron"
tronApi := tron.NewTronApi(
"https://api.trongrid.io", //全节点URL
"https://api.trongrid.io", //合约节点URL
"https://api.trongrid.io", //事件节点URL
)
Si está utilizando el nodo TronGrid proporcionado oficialmente por Tron, puede utilizar directamente los dos métodos proporcionados por el paquete tron para acceder a la cadena principal y la cadena de prueba shasta:
MainNetTronApi()
: Acceso a la cadena principalTestNetTronApi()
: Acceso a la cadena de pruebas shasta
Por ejemplo, el siguiente código es equivalente:
urlM := "https://api.trongrid.io"
tronApiM1 := tron.NewTronApi( urlM, urlM, urlM)
tronApiM2 := Tron.MainNetTronApi() //与上面等效
urlT := "https://api.shasta.trongrid.io"
tronApiT1 = tron.NewTronApi(urlT, urlT, urlT)
tronApiT2 =tron.TestNetTronApi() //与上面等效
5.2 Acceso a la API de varios nodos
TronApi encapsula un subconjunto de API proporcionadas por los nodos oficiales de Tron y proporciona encapsulación de las API de uso común para acceder a la cadena de bloques de Tron.
Por ejemplo, para consultar el saldo de TRX de una cuenta específica, puede usar la getaccount
interfaz del nodo Tron , que corresponde al getAccount()
método en TronApi :
//import "fmt"
//import "trontool/tron"
account,_ := tronApi.getAccount("TEgM5CPeqow...7vcBgVkD4tP") //查询账户信息
fmt.Printf("balance: %d\n", account.Balance) //显示账户余额
5.3 Ampliar TronAPi
TronApi se basa en NodeCllient para acceder a la API de nodo de Tron. Por lo tanto, si necesita ampliar TronApi para admitir más API de nodo Tron, puede consultar el código existente de TronApi y combinarlo con los datos técnicos de la API de nodo proporcionada por TRON .
Descarga oficial del kit de desarrollo Tron blockchain Go: http://sc.hubwiz.com/codebag/tron-go-lib/