如何在Algorand JS SDK中传递整数作为应用参数?
解决Algorand JS SDK向合约传递整数的问题
你的错误根源是合约解析到的数值并非预期的10,而是12592,导致资产转账时出现数值下溢(sender余额5000小于需扣除的12592)。问题出在参数传递的格式上——Btoi()是将字节数组转换为无符号整数,你需要确保传递的是整数对应的字节数组,而非字符串或原始数字。
正确的传递步骤:
不要直接传入数字10或字符串"10",使用Algorand JS SDK的
algosdk.encodeUint64()方法将整数转换为Uint8Array格式的字节数组:const targetAmount = 10; const encodedAmount = algosdk.encodeUint64(targetAmount);在构建应用调用交易时,将编码后的字节数组作为
application_args的第二个元素传入:const noOpTxn = algosdk.makeApplicationNoOpTxn( senderAddress, suggestedParams, appId, ["your_first_argument", encodedAmount] );此时合约中
Btoi(Txn.application_args[1])就能正确解析出数值10,避免后续转账操作出现下溢错误。
补充说明:你之前得到的12592,实际是字符串"10"的UTF-8字节值计算结果("1"的ASCII码是49,"0"是48,49*256 + 48 = 12592),这说明你之前传递的是字符串"10"而非编码后的整数字节数组,导致Btoi()解析出错误数值。
内容的提问来源于stack exchange,提问作者shallowporcupine
相关产品推荐
相关产品推荐

