相对来说,我是一个与Java智能合约交互的新手,在尝试检索智能合约函数返回的tuple[]时遇到了一个问题。这是我想调用的函数的ABI定义:
{
"inputs":[{"internalType":"address","name":"account","type":"address"}],
"name":"claimableRewards",
"outputs":
[{"components":
[
{"internalType":"address","name":"token","type":"address"},
{"internalType":"uint256","name":"amount","type":"uint256"}
],
"internalType":"struct MultiFeeDistribution.RewardData[]",
"name":"rewards",
"type":"tuple[]"
}],
"stateMutability":"view",
"type":"function"
}
以下是智能合约代码的链接:https://polygonscan . com/address/0x 920 f 22 E1 e 5 da 04504 b 765 f 8110 ab 96 a 20 e 6408 BD # code
下面是我编写的调用该函数的Java代码(为了使代码更容易阅读,我删除了错误检查):
List<Type> claimableRewardsParams = Arrays.<Type>asList(new Address(credentials.getAddress()));
List<TypeReference<?>> claimableRewardsReturnTypes = Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<DynamicStruct>>() {});
final Function claimableRewardsFunction = new Function(
"claimableRewards",
claimableRewardsParams,
claimableRewardsReturnTypes);
String claimableRewardsEncodedFunction = FunctionEncoder
.encode(claimableRewardsFunction);
EthCall claimableRewardsResponse = web3.ethCall(
Transaction.createEthCallTransaction(walletAddress, adamantRewardsContractAddress, claimableRewardsEncodedFunction),
DefaultBlockParameterName.LATEST)
.sendAsync().get();
List<Type> claimableRewardsSomeTypes = FunctionReturnDecoder.decode(
claimableRewardsResponse.getValue(), claimableRewardsFunction.getOutputParameters());
当我运行程序时,我得到以下异常:
线程“main”java.lang.RuntimeException中的异常:TypeReferenced结构必须包含具有扩展类型的类型的构造函数
我已经尝试了其他几个可声明的奖励返回类型的定义,但我无法让它工作。有人能帮我吗?
{
"inputs":[{"internalType":"address","name":"account","type":"address"}],
"name":"claimableRewards",
"outputs":
[{"components":
[
{"internalType":"address","name":"token","type":"address"},
{"internalType":"uint256[]","name":"amount","type":"uint256[]"}
],
"internalType":"struct MultiFeeDistribution.RewardData[]",
"name":"rewards",
"type":"tuple[]"
}],
"stateMutability":"view",
"type":"function"
}
您需要定义一个扩展DynamicStruct的类
public class RewardData extends DynamicStruct {
public RewardData(Address token, Uint256 amount) {
super(new Type[]{token, amount});
}
}
然后将DynamicSTRt
替换为RewardData
List<TypeReference<?>> claimableRewardsReturnTypes = Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<RewardData>>() {});
我找到了一些很好的SO链接(如何从异步回调函数返回值?以及从node.js中的回调函数返回值等),但它们并不是不能为我的问题提供解决方案。 我的问题:能够得到异步调用的结果,但我如何使用这个结果返回我的函数? 这里获取callBackResponse的值为true或false,并希望将该值用作:
我一直在找这样的东西,但我找不到,所以就来了。 一些背景 我使用opencv从视频文件中检索帧。通常人们会无休止地循环这样做: 或 现在我想检索所有帧并在没有更多帧时退出循环。然而,我在python中的技能还不够强,无法做我想做的事情。 我想知道的是 函数(或方法,我不知道它们在python中是如何调用的)返回一个元组:首先代表操作成功,其次代表返回的帧。当元组的第一个元素为false时,我想打破
问题内容: 我正在使用Postgresql 8.3,并具有以下简单功能,该功能会将a返回 给客户端 现在,我可以使用以下SQL命令来调用此函数并操纵返回的游标,但是游标名称是由PostgreSQL自动生成的 此外,如38.7.3.5中所述,显式地将游标名称声明为函数的输入参数 。返回游标。我可以声明自己的游标名称并使用此游标名称来操纵返回的游标,而不是为我自动生成的Postgresql吗?如果不是
问题内容: 我如何使这个小功能“ imageExists”返回ajax请求是否成功? 问题答案: 我相信您将必须使用同步模式并使用单独的变量来存储返回值。
问题内容: 我正在寻找一种更好的解决方案,以使用jQuery进行AJAX调用,使PHP文件返回一个数组,并将其作为Javascript数组从客户端发布。这是我一直在做的事情: PHP文件(Example.php): JS档案: 我目前的方法对我的口味来说有点太复杂了。 我想做的就是能够 在PHP方面,并在AJAX调用后将其直接转换为Javascript数组。 想法,有人吗? 问题答案: 使用JSO
问题内容: 我想返回数组的奇数,但是Eclipse似乎不接受我的返回码。我认为这需要返回整个数组,因为我将数组设置为方法的参数。如前所述,我需要传递一个数组并获取该数组的特定元素作为回报。即使我将该数组设为静态,如何返回单个元素? 编辑:好吧,这里是: 我知道这里可能存在多个错误,但我正在努力,不仅要返回奇数,还要将它们加在一起。 问题答案: 您的代码应如下所示: 这里的要点是方法返回类型,它应该