I'd like to input & output an array of bytes (of approximately 56 characters each). The input works but the compiler gives a TypeError on bytes[] for the output function:
TypeError: Internal type is not allowed for public or external functions
function iterator() constant returns (address[],uint256[],uint256[],bytes[]){
^_____^
How do I return bytes from a function? Below is the code:
CustomMap ledger;
struct CustomMap {
mapping (address => uint256) maps;
address[] keys;
bytes[] newKeys;
}
function createTokens(address recipient) public payable {
...
if (contains(recipient)) {
ledger.maps[recipient] = ledger.maps[recipient].add(tokens);
} else {
ledger.maps[recipient] = tokens;
ledger.keys.push(recipient);
ledger.newKeys.push("");
}
...
}
function contains(address _addr) constant returns (bool) {
if (ledger.keys.length == 0) {
return false;
}
uint256 len = ledger.keys.length;
for (uint256 i = 0 ; i < len ; i++) {
if (ledger.keys[i] == _addr) {
return true;
}
}
return false;
}
function register(bytes key) returns (bool) {
if (ledger.keys.length == 0) {
return false;
}
uint256 len = ledger.keys.length;
for (uint256 i = 0 ; i < len ; i++) {
if (ledger.keys[i] == msg.sender) {
ledger.newKeys[i] = key;
return true;
}
}
return false;
}
function iterator() constant returns (address[],uint256[],uint256[],bytes[]){
uint256 len = ledger.keys.length;
address[] memory keys = new address[](len);
uint256[] memory values = new uint256[](len);
uint256[] memory values2 = new uint256[](len);
bytes[] memory newKeys = new bytes[](len);
for (uint256 i = 0 ; i < len ; i++) {
address key = ledger.keys[i];
keys[i] = key;
values[i] = ledger.maps[key];
values2[i] = token.balanceOf(key);
newKeys[i] = ledger.newKeys[key];
}
return (keys,values,values2,newKeys);
}