Verständnis der Bytes16-Darstellung in Solidity

Ich habe eine einfache Funktion, die byteweise den Wert eines bytes16 0x20010db800000000000000000000001 druckt, und ich erhalte das folgende Ergebnis.

['0x20', '0x01', '0x0d', '0xb7', '0xff', '0xff', '0xff', '0x65' ]

[ '0x20', '0x7e', '0x22', '0x36', '0x66', '0xc0', '0x00', '0x00' ]

Es sollte nicht sein??

['0x20', '0x01', '0x0d', '0xb8', '0x00', '0x00', '0x00', '0x00' ]

[ '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x01' ]

Warum ist es nicht??

Hier der Code:

function print1(bytes16 a) public 
returns (bytes1,bytes1,bytes1,bytes1,bytes1,bytes1,bytes1,bytes1){
return (a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7]);}


function print2(bytes16 a) public returns
(bytes1,bytes1,bytes1,bytes1,bytes1,bytes1,bytes1,bytes1){
return (a[8],a[9],a[10],a[11],a[12],a[13],a[14],a[15]);}    

Schritt zum Reproduzieren:

print1(0x20010db8000000000000000000000001);
print2(0x20010db8000000000000000000000001);

Antworten (1)

Ich habe deinen Code mit Remix getestet. Aber es funktioniert gut. Wenn Sie mit Trüffel (Javascript-Testdatei) getestet haben, sollten Sie print1 ("0x20010db8000000000000000000000001") verwenden, vergessen Sie nicht "". Ich habe ein ähnliches Problem mit dem byte1-Array wie hier .

Geben Sie hier die Bildbeschreibung ein

Und das ist das Trüffelergebnis mit Ihrem Code,

Geben Sie hier die Bildbeschreibung ein

plus, sowohl print1 als auch print2, fügen Sie besser "pure" hinzu, um Warnungen zu vermeiden, so etwas wie ...

function print1(bytes16 a) public pure
OK, das ist in Ordnung, aber warum?
@StefanoAngieri Ich bin mir nicht sicher, aber es muss explizit erforderlich sein, dass " " String, Bytes, Adresse außer Zahl übergeben.