Como todo desarrollador experimentado sabrá, la programación en la cadena de bloques es un concepto que requiere de formación y aprendizaje. Puedes saber programar en cualquier lenguaje pero no tener idea de como hacerlo en cierta cadena de bloques, esta mini experiencia nos adentrará y nos dará los recursos necesarios para programar concretamente en la cadena de bloques de HIVE y Hive-Engine bajo el lenguaje javascript/JQuery.
Agradecemos a Hashkings por la iniciación del curso a través de HK UNIVERSITY que ha hecho posible este post.
TOKENS, NFTs y Transacciones
Estos son los conceptos básicos con los que deberemos tratar
Para los usuario más experimentados aquí tendremos los recursos de los endpoints, métodos y tablas a los que podemos llamar con Hive-Engine
Balances
Cuando nos referimos a balances, hablaremos de tokens, estos son la cantidad de tokens que tiene un usuario o cuenta de un activo concreto. Por ejemplo: BUDS
Existen varias formas de hacer esta consulta utilizando directamente la librería sscjs o haciendo una llama ajax con JQuery a la función find/findOne al contrato tokens y tabla balances. En este ejemplo usaremos la librería sscjs:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sscjs@latest/dist/ssc.min.js"></script>
<script>
const ssc = new SSC('https://api.hive-engine.com/rpc');
// Obtemos los BUDs que tiene la cuenta de apzyx....
var BUDSinStk = parseFloat(0);
await ssc.findOne(
'tokens',
'balances',
{
account: 'apzyx',
symbol: "BUDS"
}, (err, result) => {
console.log(err, result);
BUDSinStk = parseFloat(result.balance);
alert(BUDSinStk);
});
</script>
En esta consulta se utiliza el método findOne por lo que sólo recuperará una fila, podemos cambiar el token BUDS por el token HKWATER o cualquier otro que este dentro del nodo Hive-Engine,
Transacciones
Las transacciones o histórico de transacciones de una cuenta requerirán de hacer varias llamadas a un mismo método que devuelve un límite del 1000 o 500 transacciones por llamada, utilizaremos el atributo offset a modo de paginación.
<script>
function sleep(ms)
{
var start = new Date().getTime(), expire = start + ms;
while (new Date().getTime() < expire) { }
return;
}
var startV = BigInt(0);
var completarDatos = true;
var arrayHKNVAULT = [];
while (completarDatos) {
await $.get({
url: "https://history.hive-engine.com/accountHistory",
data: {
account: accountV,
symbol: "BUDS",
offset: startV,
limit: 500
},
async: false
},
function(data, status) {
console.log(data);
console.log(status);
for (var i = 0; i < data.length; i++) {
arrayHKNVAULT.push(data[i]);
var dataS = JSON.stringify(data[i])
var dataJs = JSON.parse(dataS);
if (dataJs.symbol == 'BUDS') {
if (dataJs.operation == 'tokens_transfer') {
if (dataJs.to == 'null') {
completarDatos = false;
}
}
}
}
if (data.length < 500) {
completarDatos = false;
}
startV = startV + BigInt(500);
});
sleep(333);
}
console.log(arrayHKNVAULT);
</script>
Estos serían los parámetros que acepta este endpoint de histórico:
GET Parameters
account: a HIVE account or multiple HIVE accounts separated by a comma (required)
symbol: a Hive-Engine token symbol (optional)
ops: a comma separated list of operations e.g. tokens_transfer (optional)
timestampStart: a unix timestamp that represents the start of the dataset (optional)
timestampEnd: a unix timestamp that represents the end of the dataset (optional)
limit: number of records for the dataset (max is 500) (optional)
offset: offset for the dataset (required to browse a dataset that is bigger than 500 records) (optional)
NFTs
Para los NFTs método de búsqueda será find, el contrato será nft y la tabla el id del NFT + Instances, en nuestro caso HKFARMInstances
<script>
async function nfts() {
$.ajaxSetup({ async: false });
var offsetV = BigInt(0);
var completarDatos = true;
while (completarDatos) {
await $.ajax({
url: "https://engine.rishipanthee.com/contracts",
method: "POST",
contentType: "application/json",
async: false,
data: '{"jsonrpc":"2.0", "method":"find", "params":{"contract":"nft", "table":"HKFARMinstances","query":{"properties.TYPE": "plot"},"offset":'+ offsetV + ', "limit":1000, "indexes":[]}, "id": 1}'
,
success: function(response) {
console.log(response.result);
if (response.result.length < 1000) {
completarDatos = false;
}
offsetV = offsetV + BigInt(1000);
},
error: function(error) {
console.log(error);
alert("error");
completarDatos = false;
}
});
}
}
</script>
Espero que todo esto les sirva de guía o ayuda para comenzar, iremos actualizando el post conforme vayamos aprendiendo nuevas estrategias y conceptos dentro del universo HIVE y HIVE-ENGINE, de la mano de HK UNIVERSITY ❤️
Pueden acceder a mi proyecto actual y trastear en la dirección
https://hashkings.azurewebsites.net/