如何从web3j库中引用数组类型?我有一个契约函数,它返回访问该契约的人的地址数组。我想把这些作为数组放到java/kotlin项目中。这是代码-
//gets an array of addresses from the contract
fun getAddressValues(): RemoteCall<Array<Address>> {
val function = Function(
functionGetAddressValues,
listOf(),
listOf<TypeReference<*>>(object : TypeReference<Array<Address>>() {})
)
// TODO: NOTE - THIS ARRAY IS FROM THE WEB3J LIBRARY "org.web3j.abi.datatypes.Array"
return executeRemoteCallSingleValueReturn(function, Array<Address>().javaClass) // TODO: error
}
executeRemoteCallSingleValueReturn(function, Array<Address>().javaClass) // TODO: error
Array<Address>().javaClass
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract VotingContract {
address[] addressStorage;
uint256 partyOneVotes;
uint256 partyTwoVotes;
uint256 partyThreeVotes;
constructor() {
partyOneVotes = 0;
partyTwoVotes = 0;
partyThreeVotes = 0;
}
function registerVote(uint256 num) public {
require(
num < 4 && num > 0,
"the given number is invalid as the number is out of range"
);
bool a = false;
address messageSender = msg.sender;
uint256 i;
for (i = 0; i < addressStorage.length; i++) {
if (messageSender == addressStorage[i]) {
a = false;
//set to true to block multiple entries.
}
}
require(a == false, "Your vote has already been registered");
addressStorage.push(messageSender);
if (num == 1) {
partyOneVotes++;
} else if (num == 2) {
partyTwoVotes++;
} else {
partyThreeVotes++;
}
}
function getAddressValues() public view returns (address[] memory) {
return addressStorage;
}
function getPartyOneVotes() public view returns (uint256) {
return partyOneVotes;
}
function getPartyTwoVotes() public view returns (uint256) {
return partyTwoVotes;
}
function getPartyThreeVotes() public view returns (uint256) {
return partyThreeVotes;
}
}
function getAddressValues() public view returns (address[] memory) {
return addressStorage;
}
也许你对数组使用了错误的类型。我用DynamicArray代替Array。
这种代码和平调用参数中带有地址的函数并返回DynamicArray。DynamicArray的值显示在控制台上:
val function = org.web3j.abi.datatypes.Function("getTokensFromOwner",
inputParameters,
Arrays.asList<TypeReference<*>>(object: TypeReference<org.web3j.abi.datatypes.DynamicArray<Uint256>>() {}))
val encodedFunction = FunctionEncoder.encode(function)
val transaction = Transaction.createEthCallTransaction("0xD8e5D841C0db4c4b95fa9fCEc48936F51Aeeaed8", "0x6Ac98A430D17ef564091bA470785f1389d0b9371", encodedFunction)
val response: EthCall = web3j.ethCall(transaction, DefaultBlockParameter.valueOf("latest")).sendAsync().get() // get the result of the smartcontract
val value = response.value
val someTypes = FunctionReturnDecoder.decode(value, function.outputParameters)
var tokens: DynamicArray<Uint256> = DynamicArray((someTypes.get(0).value as ArrayList<Uint256>).toList())
for (token: Uint256 in tokens.value)
{
Log.v("token ", token.value.toString())
}
智能合约功能:
function getTokensFromOwner(address owner) external view returns (uint256[] memory)
{
uint256 nbTokens = balanceOf(owner);
uint256[] memory tokensId = new uint256[](nbTokens);
for (uint256 i=0; i< nbTokens;i++)
{
tokensId[i] = (tokenOfOwnerByIndex(owner, i));
}
return tokensId;
}
我希望这个例子能帮助你:)
如何拆分阵列?例如,我有一个如下字符数组: 现在,我想用位置6上可以看到的空格拆分数组。拆分后数组将如下所示: 我确实在这里找到了类似的帖子,但在java或Kotlin中没有。 我知道我可以这样做: 但是,如果可能的话,我想要另一种方式。这占用了大量内存,在大型数组上也需要大约30-40毫秒 如何使用java或静态编程语言做到这一点
我已经在这里问了一个问题,但是这个问题只回答了字符串。我不能编辑它,因为那里已经有几个答案了。 现在,我明白了如何用那篇文章中给出的空格分割它。但是,我如何用像这样的自定义类对象分割它: 现在,我想在为false的地方拆分。例如,我有这个数组: 现在,如果将isAdult拆分为false,则如下所示: 那么,如何在java或静态编程语言中实现这一点
让我们假设我在科特林有一门课,如下所示 此外,让我们定义一个内插函数生成电子邮件域,它基于给定域的名称生成电子邮件地址 现在,正如有人说Kotlin是100%可与Java互操作的,我如何在Java类中使用这个中缀函数? 上面使用infix可能不合适,但我想知道如何在Java中使用。 如果我的理解有误,请纠正。
我试图用web3j编写一个Java应用程序,它可以读取任意的abi文件,向用户显示AbiDefinitions列表,并让用户调用自己选择的常量函数。我如何计算下面的输出类型? TypeReference 类对泛型类型使用技巧,当泛型类型在源代码中硬编码时,这些技巧可以正常工作,如下所示: 这就是生成的合约包装器要做的。 对于简单类型,我可以这样做: 对于“int256[2]”这样的数组类型,该怎么
在Java中,可以初始化数组,例如: Kotlin的数组初始化是什么样子的?
[{“id”:1,“first_name”:“Lillis”,“last_name”:“Hawgood”,“cars”:[{“item”:“Savana 1500”},{“item”:“Vibe”},{“item”:“Estate”}]}] 数据类MyData(val id:Int=0,val first_name:String=“”,val last_name:String=“”,val car