Exemple #1
0
        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)
        {
            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);
            }
        }
Exemple #3
0
        public override void Encode(ref AbiEncodeBuffer buff)
        {
            // bytes<M>: enc(X) is the sequence of bytes in X padded with trailing
            // zero-bytes to a length of 32 bytes.
            int i = 0;

            foreach (byte b in _val)
            {
                buff.HeadCursor[i++] = b;
            }

            buff.IncrementHeadCursor(UInt256.SIZE);
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
 // encoded the same way as an uint160
 public override void Encode(ref AbiEncodeBuffer buffer)
 {
     MemoryMarshal.Write(buffer.HeadCursor.Slice(12), ref _val);
     buffer.IncrementHeadCursor(UInt256.SIZE);
 }
Exemple #6
0
 public override void Encode(ref AbiEncodeBuffer buffer)
 {
     buffer.HeadCursor[UInt256.SIZE - 1] = _val ? (byte)1 : (byte)0;
     buffer.IncrementHeadCursor(UInt256.SIZE);
 }