Reading Player assets
Depending on your needs, we offer various ways to validate the balance of a player - whenever that's for an ERC20, ERC721, ERC1155 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 ERC721 / ERC1155 type contracts, causing there to be a small delay between on-chain events and the actual sdk method response.
NFTs (ERC721, ERC1155)
By running the following method, you will receive all ERC721 and ERC1155 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 (ERC20 and the native token)
In order to get all ERC20 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 whenever 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"
// }
// }