Reading Player assets
Depending on your needs, we offer various ways to validate the balance of a player - whether that’s for an ERC-20, ERC-721, ERC-1155 or the native token on Beam.
However, depending on the token types there are a few caveats, as we are using an indexer for the ERC-721 / ERC-1155 type contracts, causing there to be a small delay between on-chain events and the actual SDK method response.
NFTs (ERC-721, ERC-1155)
By running the following method, you will receive all ERC-721 and ERC-1155 type assets within a profile for all the contracts we registered for your game. As there could be quite a few assets, the response is paginated.
Note that at the moment of writing, we do not expose filtering options yet, but they are expected to drop soon in order for you to filter in different ways to get meaningful results.
const profileAssets = await beam.assets.getProfileAssetsForGamePostV3("entity-id", {
sortDirection: 'desc';
sortBy: 'acquiredAt';
contract: "0x..."; // if you want to get assets only from one collection, null/undefined otherwise
includeAttributes: true; // defaults to false
continuation: null; // pagination continuation token
limit: 20;
});
// {
// "data": [
// {
// "id": "string",
// "name": "string",
// "imageUrl": "string",
// "assetType": "string",
// "assetAddress": "string",
// "assetId": "string",
// "quantity": 0
// }
// ],
// "pagination": {
// "count": 0,
// "limit": 10,
// "offset": 0
// }
// }
Currencies (ERC-20 and the native token)
In order to get all ERC-20 token balances for a profile, you can run the getProfileCurrencies
method. The response model for this enpdoint is not paginated, as we don’t expect a single game to have more than a few on-chain currencies to support their in-game economy.
const profileTokens = await beam.assetsV2.getProfileCurrenciesV2("entity-id");
// {
// "data": [
// {
// "address": "string",
// "name": "string",
// "symbol": "string",
// "decimals": 0,
// "logoUri": "string",
// "chainId": 13337;
// "balance": "string"
// }
// ]
// }
Native token
If you are interested in validating the native currency of a profile, for example to validate whether the profile has enough BEAM to run a self-paid transaction, you could fetch the native token balance directly by doing the following:
const profileTokens = await beam.assets.getProfileNativeCurrencyV3("entity-id");
// {
// "nativeTokenBalance": {
// "name": "string",
// "symbol": "string",
// "decimals": 0,
// "logoUri": "string",
// "chainId": 13337,
// "balance": "string"
// }
// }