#Can token balance be accessed in provable code?

6 messages · Page 1 of 1 (latest)

rocky adder
#

const currentTokenBalance = Mina.getBalance(this.sender, this.tokenId); throws on compile for me, since it seems like it calls non-provable code:

at toConstantField (o1js/src/lib/field.ts:1332:9)
at Function.toBase58 (o1js/src/lib/signature.ts:203:9)
at PublicKey.toBase58 (o1js/src/lib/signature.ts:195:22)
at Module.markAccountToBeFetched (o1js/src/lib/fetch.ts:266:35)
at Object.getAccount (o1js/src/lib/mina.ts:1019:13)
at Module.getBalance (o1js/src/lib/mina.ts:1191:25)

Is there a version that can be called in provable code? Or can I set a precondition that some private input must be the on-chain state for a given token balance?

idle marsh
#
  @method verifyBadge(nft: PublicKey, nftTokenId: Field) {
    const account = Account(nft, this.token.id);
    const tokenBalance = account.balance.getAndAssertEquals();

    const minanft = new MinaNFTContract(nft, nftTokenId);
    const version = minanft.version.getAndAssertEquals();

    version.assertEquals(tokenBalance);
  }
rocky adder
#

Thank you!

idle marsh
rocky adder
#

Nice one, you are really putting the network through its paces 🙂