API
Estas son las API que permiten realizar operaciones sobre la blockchain.
Utilidades de blockchain
Contiene métodos para el envío de comandos a la blockchain y las siguientes funciones:
Envío de transacciones
El método sendTransaction
devuelve un PromiseEither<BlockchainError, UUID>
.
Este método envía una transacción a la blockchain. Recibe un payload de tipo SendTransactionParams
y un caller
.
const blkUtils = sdk.transactions.blkUtilsApi;
const caller = sdk.transactions.callers.getCaller();
const approveMethod = new ContractFunction('approve', AssetType.NFT);
approveMethod.addInput('to', '0x97C091cBc01feC79742b7d6657e82748e6039a15');
approveMethod.addInput('tokenId', 1);
const payload:SendTransactionParams = {
address: new EthereumAddress('0x5CDDc72bC879f311aa32cfE6B0C479ab9b5b4F23'),
chainId: new ChainID(80001),
method: approveMethod
}
const result = await blkUtils.sendTransaction(payload, caller);
El caller
es una dirección Ethereum que se utiliza para firmar la transacción. Y representa al usuario que realiza la transacción.
Envío de consultas
El método query<T>
devuelve un PromiseEither<BlockchainError, T>
. Permite realizar consultas a la blockchain. Recibe un comando de tipo QueryCommand<T>
const blkUtils = sdk.transactions.blkUtilsApi;
const cmd = new ReadQuery<string>(
new ChainID(80001),
new EthereumAddress('0x5CDDc72bC879f311aa32cfE6B0C479ab9b5b4F23'),
new ContractFunction('owner', AssetType.NFT)
)
const result = await blkUtils.query(cmd)
Observar sagas de transacciones
El método observeSaga
nos permite enviar el ID de una transacción y obtener los eventos que estén relacionados con esa transacción. Devuelve un Observable<CommandEvent>
.
const transaction = await blkUtils.sendTransaction(payload, caller);
transaction.fold(
(err) => console.error(err.message),
(id) =>
blkUtils.observeSaga(id).subscribe((event) => {
const { name, status } = event.payload;
console.log(`Metodo ${name}, Estado ${status}`);
})
);
API para ERC20
Transferir tokens ERC20
El metodo transfer
devuelve un PromiseEither<BlockchainError, UUID>
y recibe un payload de tipo TransferErc20Payload
y un caller
..
const api = sdk.transactions.erc20Api;
const caller = sdk.transactions.callers.getCaller();
const payload: TransferErc20Payload = {
amount: new Amount("100"),
asset: Token.fromPrimitive({
type: AssetType.ERC20,
address: "0xd87ba7a50b2e7e660f678a895e4b72e7cb4ccd9c",
amount: "46.49995",
assetId: "0",
chainId: 80001,
metadata: new Metadata({}).toPrimitive(),
}),
to: new Owner("0x97C091cBc01feC79742b7d6657e82748e6039a15"),
};
const transaction = await api.transfer(payload, caller);
API para ERC721
Minar un NFT
El metodo mint
devuelve un PromiseEither<BlockchainError, UUID>
y recibe un MintableAsset
, el nuevo owner
y el caller
.
const api = sdk.transactions.erc721Api;
const caller = sdk.transactions.callers.getCaller();
const file = new File([], "image.jpg"); // input file
const assetData = {
type: AssetType.NFT,
address: "0x7C6ac312c08b975a0e74Be8Cd8C6ad8b8b4A8DEB", // Direccion de contrato
chainId: 80001,
metadata: {
name: "My NFT",
description: "Description of my nft",
attributes: [
{
trait_type: "Color",
value: "green",
},
{
trait_type: "Year",
value: "1952",
},
], // Un arreglo con los attributos del asset
},
};
const mintableAsset = sdk.utils.mintableAssetFromPrimitive(file, assetData);
await mintableAsset.prepare();
const owner = new Owner("0x97C091cBc01feC79742b7d6657e82748e6039a15");
const transaction = await api.mint(mintableAsset, owner, caller);
Transferir un NFT
El metodo transfer
devuelve un PromiseEither<BlockchainError, UUID>
y recibe un Asset
, el nuevo owner
y el caller
.
const api = sdk.transactions.erc721Api;
const caller = sdk.transactions.callers.getCaller();
const asset = AssetsFactory.fromPrimitive({
type: AssetType.NFT,
address: "0x7C6ac312c08b975a0e74Be8Cd8C6ad8b8b4A8DEB", // Direccion de contrato
chainId: 80001,
assetId: '1',
metadata: {},
});
const owner = new Owner("0x97C091cBc01feC79742b7d6657e82748e6039a15");
const transaction = await api.transfer(asset, owner, caller);
Borrar un NFT
El metodo burn
devuelve un PromiseEither<BlockchainError, UUID>
y recibe un Asset
y el caller
.
const api = sdk.transactions.erc721Api;
const caller = sdk.transactions.callers.getCaller();
const asset = AssetsFactory.fromPrimitive({
type: AssetType.NFT,
address: "0x7C6ac312c08b975a0e74Be8Cd8C6ad8b8b4A8DEB", // Direccion de contrato
chainId: 80001,
assetId: '1',
metadata: {},
});
const transaction = await api.burn(asset, caller);
API para ERC1155
Minar un erc1155
El metodo mint
devuelve un PromiseEither<BlockchainError, UUID>
y recibe un MintableAsset
, el nuevo owner
y el caller
.
const api = sdk.transactions.erc1155Api;
const caller = sdk.transactions.callers.getCaller();
const data = {
type: AssetType.ERC1155,
address: "0x7C6ac312c08b975a0e74Be8Cd8C6ad8b8b4A8DEB", // Direccion de contrato
chainId: 80001,
amount: '10',
assetId: "1",
metadata: {
name: "My token erc1155",
description: "Description of my erc1155",
attributes: [], // Un arreglo con los attributos del asset
symbol: 'MTO',
decimals: 5
},
};
const file = new File([], "image.jp"); // input file
const asset = sdk.utils.mintableERC1155FromPrimitive(data, file);
const owner = new Owner("0x97C091cBc01feC79742b7d6657e82748e6039a15");
const transaction = await api.mint(asset, owner, caller);
Transferir un erc1155
El metodo transfer
devuelve un PromiseEither<BlockchainError, UUID>
y recibe un payload que es de tipo TransferERC1155Payload
y el caller
.
const api = sdk.transactions.erc1155Api;
const caller = sdk.transactions.callers.getCaller();
const data = AssetsFactory.fromPrimitive({
type: AssetType.ERC1155,
address: "0x7C6ac312c08b975a0e74Be8Cd8C6ad8b8b4A8DEB", // Direccion de contrato
chainId: 80001,
amount: '10',
assetId: "1",
metadata: {},
});
const payload: TransferERC1155Payload = {
amount: new Amount('1'),
asset: data,
assetId: new ID('2'),
to: new Owner("0x97C091cBc01feC79742b7d6657e82748e6039a15")
}
const transaction = await api.transfer(payload, caller);