Solidity
使用 bytes32 數組時數組化值無效
由於我們無法將字元串數組作為參數傳遞,因此我在函式中使用了 byte32 數組。該程式碼在編譯時沒有錯誤。但是當我在 Remix IDE 中為 drawCard 函式提供如下輸入時
"this is token uri", ["maham",67,"Silver","First Token","image url"]
我收到以下錯誤:
transact to CryptoGogos.drawCard errored: Error encoding arguments: Error: invalid arrayify value (argument="value", value="maham", code=INVALID_ARGUMENT, version=bytes/5.0.5)
我的程式碼如下:
function drawCard(string memory _tokenURI, bytes32[] memory params) public { require(uint(params[1])<total_supply, "Input supply is not less than total supply of cards."); _tokenIds.increment(); uint256 newNftTokenId = _tokenIds.current(); Cards memory c; c.name = string(abi.encodePacked(params[0])); c.supply = uint(params[1]); c.cat = string(abi.encodePacked(params[2])); c.description = string(abi.encodePacked(params[3])); c.image_url= string(abi.encodePacked(params[4])); c.card_id = newNftTokenId; card.push(c); tokeninfo[newNftTokenId] = c; }
問題是您使用和參數填充
params
數組,而它只接受值。uint``string``bytes32
基本上 a
bytes32
是長度為 64 的十六進制數,不帶 0x 前綴(1 個字節 = 2 個十六進製字元)。要將某些內容轉換為 bytes32,請先將其轉換為十六進制,然後根據需要在開頭添加任意數量的 0,以獲得長度為 64 的十六進制(不含 0x)。範例
maham
:十六進制 -> 6d6168616d
字節32-> 00000000000000000000000000000000000000000000000000000006d6168616d
請注意,0x 前綴對於 remix 是強制性的,因此每個 bytes32 參數的長度應等於 66。