public override void Encode(ref AbiEncodeBuffer buff) { var uintEncoder = UInt256Encoder.UncheckedEncoders.Get(); try { // write data offset position into header int offset = buff.HeadLength + buff.DataAreaCursorPosition; uintEncoder.Encode(buff.HeadCursor, offset); buff.IncrementHeadCursor(UInt256.SIZE); // write array item count into data buffer int len = _val.Count(); uintEncoder.Encode(buff.DataAreaCursor, len); buff.IncrementDataCursor(UInt256.SIZE); // write payload into data buffer var payloadBuffer = new AbiEncodeBuffer(buff.DataAreaCursor, Enumerable.Repeat(_info.ArrayItemInfo, len).ToArray()); foreach (var item in _val) { _itemEncoder.SetValue(item); _itemEncoder.Encode(ref payloadBuffer); buff.IncrementDataCursor(_itemEncoder.GetEncodedSize()); } } finally { UInt256Encoder.UncheckedEncoders.Put(uintEncoder); } }
public override void Encode(ref AbiEncodeBuffer buff) { Span <byte> utf8 = UTF8.GetBytes(_val); var uintEncoder = UInt256Encoder.UncheckedEncoders.Get(); try { // write data offset position into header int offset = buff.HeadLength + buff.DataAreaCursorPosition; uintEncoder.Encode(buff.HeadCursor, offset); buff.IncrementHeadCursor(UInt256.SIZE); // write payload len into data buffer int len = utf8.Length; uintEncoder.Encode(buff.DataAreaCursor, len); buff.IncrementDataCursor(UInt256.SIZE); // write payload into data buffer utf8.CopyTo(buff.DataAreaCursor); int padded = PadLength(len, UInt256.SIZE); buff.IncrementDataCursor(padded); } finally { UInt256Encoder.UncheckedEncoders.Put(uintEncoder); } }
public override void Encode(ref AbiEncodeBuffer buff) { // bytes, of length k(which is assumed to be of type uint256): // enc(X) = enc(k) pad_right(X), i.e.the number of bytes is encoded as a uint256 // followed by the actual value of X as a byte sequence, followed by the minimum // number of zero-bytes such that len(enc(X)) is a multiple of 32. // write length prefix var uintEncoder = UInt256Encoder.UncheckedEncoders.Get(); try { // write data offset position into header int offset = buff.HeadLength + buff.DataAreaCursorPosition; uintEncoder.Encode(buff.HeadCursor, offset); buff.IncrementHeadCursor(UInt256.SIZE); // write payload len into data buffer int len = _val.Count(); uintEncoder.Encode(buff.DataAreaCursor, len); buff.IncrementDataCursor(UInt256.SIZE); // write payload into data buffer int i = 0; foreach (byte b in _val) { buff.DataAreaCursor[i++] = b; } int padded = PadLength(len, UInt256.SIZE); buff.IncrementDataCursor(padded); } finally { UInt256Encoder.UncheckedEncoders.Put(uintEncoder); } }