Ethereum Asked by Paulo N. Carrillo Peña on December 5, 2020
i’m glad to follow this forum, it is very helpful.
I’m using truffle to develop contracts and i just found that dynamic arrays are not yet suported, for that reason i was using string arrays with a fixed lenght and i found that the element with index 0 is not showing anything and last one says undefined. do you know ay reason of that?, do i have to get elements in a different way??
This is the function in solidity:
pragma solidity ^0.4.21;
pragma experimental ABIEncoderV2;
contract Example {
function getStringArray() public returns (string[]) {
string[] memory resultStr = new string;
resultStr[0] = "355555555";
resultStr[1] = "2";
resultStr[2] = "8888";
return resultStr;
}
}
I also did a test with truffle like this:
in javascript i test getting elements one by one and i got this:
var ExampleCont = artifacts.require("Example");
contract('ExampleCont', async(accounts) => {
before(async () => {
ExampleContract = await ExampleCont.new();
});
it('Upload File', async () => {
let stringArray = await ExampleContract.getStringArray.call();
console.log("list size=" + stringArray.lenght+"0="
+ stringArray[0] + "1="+stringArray[0]+", 2=" + stringArray[1] + "3=" + stringArray[2]);
}
}
list size=3, value 0= , 1=355555555, 2=2, 3=undefined
any idea about what’s happening in this case?, how do i have work well with string arrays to get all elements?
I used ABIEncoderv2 with solidity v0.5.0, and below code works perfectly.
function _getStringArray() public view returns (string[] memory) {
string[] memory resultStr = new string[](3);
resultStr[0] = "355555555";
resultStr[1] = "2";
resultStr[2] = "8888";
return resultStr;
}
JavaScript starts here. I have used "web3 ^1.0.0-beta.36". I have tested in Kovan network, so use your kovan INFURA configuration to see it works. It's what can I do for now.
const ABI = [{"constant":true,"inputs":[],"name":"_getStringArray","outputs":[{"name":"","type":"string[]"}],"payable":false,"stateMutability":"view","type":"function"}];
const infuraUrl = "INFURAURL";
const infuraKey = "INFURAKEY";
const web3 = new Web3(infuraUrl+infuraKey)
ReactDOM.render(
<div id ="test"></div>,
document.getElementById('app')
);
module.hot.accept();
function integrateContract() {
return new Promise(function (resolve, reject) {
var contract = new web3.eth.Contract(ABI, "0x9fb7ba497a7572cc3234c5d0ae4dddc08d7bc1c0");
resolve(contract);
});
}
function getList(){
integrateContract().then(instance => {
console.log({instance})
instance.methods._getStringArray().call().then(res=> {
document.getElementById("test").append(res)
})
});
}
getList()
Answered by Mehmet Doğan on December 5, 2020
I believe this is something not available in Solidity yet (having array of string). Because string in solidity is array of bytes, and now if you see the treatment of string[] becomes 2 d array bytes[][] and that's a limitation with Solidity as of now.
Answered by Anil Singh on December 5, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP