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); }