Introducción al SDK de KotlinTezos | según MalenaLBC camlCase upDates | Octubre de 2020

KotlinTezos es una capa de lógica empresarial para todas las aplicaciones de Android que desean comunicarse con la cadena de bloques de Tezos. Sigue TezosKitLiderazgo en proporcionar una interfaz fácil y métodos prácticos para desarrolladores. Su misión es ser una biblioteca agnóstica, descentralizada y segura.

Está escrito en Kotlin, un lenguaje escrito estáticamente desarrollado por JetBrains. Kotlin compila en código de bytes, por lo que es 100% interoperable con Java. Con el tiempo, el lenguaje demostró ser más conciso y flexible, dando el nombre a la propia biblioteca KotlinTezos.

La biblioteca se escribió con respecto a la versión de Android de Magma. Lo diseñamos con la ayuda de Lazisodio una biblioteca que proporciona bibliotecas nativas libsodium compatibles con ABI de Android.

Si planea crear una aplicación de Android que funcione en la cadena de bloques de Tezos, creemos que KotlinTezos tiene todas las funciones que necesitará. Este artículo lo guiará a través de las características principales que proporciona con algunos ejemplos de codificación.

los Billetera el objeto encapsula toda la información hash de clave pública, comúnmente conocida como dirección, en el ecosistema de Tezos. Genera una clave de billetera pública y secreta si está equipada con BIP39 (Propuesta de mejora de Bitcoin n. ° 39) Ayuda mnemotécnica en inglés. Una frase mnemotécnica se puede utilizar en cualquier momento para recuperar claves y se devuelve en el objeto para que se almacene de forma segura o se muestre al usuario (para que pueda escribirla).

val wallet = Wallet(
listOf(
"abandon",
"ability",
"able",
"about",
"above",
"absent",
"absorb",
"abstract",
"absurd",
"abuse",
"access",
"accident"
)
)

En el momento de la implementación, la biblioteca BitcoinJ proporcionó un diseño PBKDF2-SHA512 confiable para su uso en el entorno Java / Kotlin. Puede leer más sobre su política de diseño en carteras deterministas. aquí.

La única reserva fue el uso de guayaba, una adicción notoriamente engorrosa. El código de los valores binarios de las semillas se extrajo para ser utilizado dentro de KotlinTezos para hacer la biblioteca lo más ligera posible.

Porque Billetera también contiene la clave secreta necesaria para firmar operaciones, implementa esta función a través de Proveedor de firmas interfaz. Esto es importante porque los clientes necesitarán un objeto para firmar operaciones, pero lo delegarán en implementaciones.

El cliente principal de la biblioteca proporciona varios puntos de entrada para trabajar con la red Tezos. Asegura que esté separado, de modo que cada método llame a lo que necesita para funcionar o lo pida como argumento.

A medida que evolucionó la implementación de Magma para Android, se agregaron nuevos métodos que eluden algunas limitaciones de blockchain.

Por ejemplo, al interactuar con contratos inteligentes, es posible que desee calcular las tarifas / tarifas del paquete ver su usuario primero y luego runOperations si el usuario está de acuerdo. Para una mayor granularidad, estos métodos llaman a varios servicios que puede usar por separado (consulte Servicios abajo).

val wallet = Wallet(...)
var operationList = OperationFactory.createOperation(
OperationType.TRANSACTION,
OperationParams.Transaction(Tez(1.0), source = wallet.address, to = "tz1..."),
OperationFees.simulationFees
)
client.bundleFees(
operations = operationList,
source = wallet.address,
signatureProvider = wallet,
operationPolicy = OperationFeesPolicy.Estimate(),
callback = object : TezosCallback<List<Operation>> {
...
// bundleFees clones the operation list but the fees are the estimated ones instead of OperationFees.simulationFees
operationList = result
...
}
)
client.runOperations(
operations = operationList,
source = wallet.address,
signatureProvider = wallet,
callback = object : TezosCallback<String> { ... }
)

KotlinTezos admite el trabajo con tokens FA1.2 TokenContractClient clase. Utiliza una implementación flexible de los parámetros de Michelson para completar la información necesaria para consultar el saldo o enviar tokens de una dirección a otra.

los SmartContractClient el atributo de interfaz es responsable de comunicarse con la cadena de bloques. Puede proporcionar su propia implementación o puede usarla TezosNodeClient.

Por ejemplo, para el tráfico con un token FA1.2 específico, crearía TokenContractClient con la dirección del contrato del token FA1.2. Al enviar un valor de token, utilizamos un número entero fijo con precisión arbitraria en forma de Java BigInteger (Los tokens FA1.2 difieren de las posiciones decimales. Es responsabilidad del receptor analizar el valor entero para su correspondiente representación decimal).

// 5 decimal point FA1.2 integer value of 1.23
val amount = 123000
val tokenClient = TokenContractClient(
network = TezosNetwork.MAINNET,
tokenContractAddress = "KT1...",
client = TezosNodeClient(...)
)
tokenClient.send(
amount = amount,
to = "tz1...",
from = "tz1...",
signatureProvider = wallet,
feesPolicy = OperationFeesPolicy.Estimate(),
callback = object : TezosCallback<String> { ... }
)

desarrollado camlCase Diestro, un intercambio descentralizado que permite intercambiar tokens XTZ y FA1.2. los DexterTokenClient en la biblioteca proporciona un puente Java / Kotlin que funciona con él.

Para que esto funcione, necesita dos contratos inteligentes relacionados con el token FA1.2 que desea intercambiar: su dirección de contratación y la dirección de contratación inteligente de Dexter para ese token. los SmartContractClient el atributo tiene la misma función que en el archivo TokenContractClient.

Mostrar valores de entrada y salida antes de aprobar una operación es una parte clave del flujo comercial. los tradeTezForToken y tradeTokenForTez Los métodos esperan aquellas cantidades que deben calcularse con anticipación. Para ayudar en este proceso, proporcionamos DexterExchange clase:

val dexterClient = DexterTokenClient(
client = TezosNodeClient(...),
exchangeContractAddress = "KT1...",
tokenContractAddress = "KT1..."
)
val tezAmount = Tez(...)
val tokenAmount = DexterExchange.getTokenTradeAmount(
amount = tezAmount,
xtzPool = dexterClient.getExchangeBalance(...),
tokenPool = dexterClient.getTokenBalance(...)
)
dexterClient.tradeTezForToken(
source = "tz1...",
amount = tezAmount,
tokenAmount = tokenAmount,
signatureProvider = wallet,
callback = TezosCallback<String> { ... }
)

Para superar las limitaciones de las operaciones de blockchain, han surgido muchos servicios que consultan información a través de una base de datos. Usos del magma Consejo para enumerar las operaciones del usuario a través de KotlinTezos ‘ ConseilClient.

val client = ConseilClient(
url = "http://conseil.server",
network = TezosNetwork.MAINNET,
apiKey = "You can get some at https://nautilus.cloud/home/keys"
)
client.operations(
from = "tz1...",
sentTypes = ,
sentTypes = listOf(OperationType.TRANSACTION, OperationType.DELEGATION),
callback = TezosCallback<List<ConseilOperation>> { ... }
)

El método de operación maneja tres consultas principales: Una operación con una dirección como fuente; con dirección como destino; y una operación de dirección dentro del campo de parámetros de la operación de contrato inteligente. Esto último es fundamental para obtener operaciones de Dexter, aunque la consulta puede tardar más de lo habitual.

La carga, el gas y el almacenamiento deben incluirse con cada operación y pueden variar mucho según el tipo y el propósito de la operación. Parámetro honorariosPolítica utilizado en algunas funciones le permite decidir cómo desea calcular estos valores:

  • Predeterminado: utilice las tarifas estándar enumeradas en documentación del protocolo.
  • Personalizado: establezca tarifas específicas.
  • Estimación: Simulación de funcionamiento y cálculo de tarifas.

los FeeEstimatorService es un servicio al que se llama cuando desea estimar el mejor valor para la operación que planea insertar. Funcionamiento en seco sin cargas y procede de acuerdo con la documentación del protocolo para calcular los valores de cargas, gas y almacenamiento.

Antes de insertar una operación, se debe falsificar y firmar para garantizar su integridad. KotlinTezos proporciona todas estas características al implementar un servicio de falsificación y un proveedor de firmas.

Por ahora, solo admite la forja remota llamando a RPC Tezos / forja / operación y luego analizar el hash resultante para asegurarse de que el nodo no se haya visto comprometido de ninguna manera.

Una foto de Dominik guadaña en Unsplash

Java es el idioma principal para finanzas y banca. Desde el principio, comprendimos el potencial de una biblioteca estable que se puede utilizar en las bases de codificación de Java y Kotlin y fuera del ecosistema de Android.

El principal participante de KotlinTezos fue Magma, nuestra billetera móvil, por lo que nuestros esfuerzos se centraron en completar la biblioteca para Android, que podría brindar toda la lógica empresarial necesaria para la aplicación de billetera.

En el futuro, nuestro plan es configurar nuestro proyecto para manejar más que ABI para Android. Nuestro objetivo a largo plazo es el proyecto Kotlin multiplataforma con bibliotecas nativas para Libsodium suministradas para cada arquitectura.

El objeto Wallet actual se crea de acuerdo con el estándar BIP39, pero planeamos ser BIP44 compatible también. Esto le daría al usuario acceso a múltiples cuentas bajo la misma clave privada.

Nuestro objetivo es respaldar los esquemas más utilizados para la mayoría de las carteras de Tezos.

KotlinTezos es compatible con Conseil, pero hay muchos otros servicios para ayudarlo a orientarse en la cadena de bloques. Equipo de Baking Bad armado Explorador de TzKT que también le permite consultar datos de blockchain.

La API proporciona puntos finales para datos de tráfico y ofrece múltiples filtros como parámetros de consulta. Nuestro plan es crear TzKtClient esto ayudaría a cualquier equipo a utilizar esta solución.

La biblioteca KotlinTezos está diseñada para ayudar a los desarrolladores de Android a integrar la cadena de bloques Tezos en sus proyectos. La biblioteca es estable, lista para producción y crece a medida que desarrollamos funciones adicionales para Cartera de magma. Espere nuevos lanzamientos cada mes.

Si está buscando una solución similar para su proyecto de iOS, eche un vistazo camlKit, nuestro Swift SDK!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *