Ejemplo n.º 1
0
        public static Message Create(MessageCommand command, ISerializable payload = null)
        {
            Message message = new Message
            {
                Flags               = MessageFlags.None,
                Command             = command,
                Payload             = payload,
                _payload_compressed = payload?.ToArray() ?? Array.Empty <byte>()
            };

            bool tryCompression =
                command == MessageCommand.Block ||
                command == MessageCommand.Consensus ||
                command == MessageCommand.Extensible ||
                command == MessageCommand.Transaction ||
                command == MessageCommand.Headers ||
                command == MessageCommand.Addr ||
                command == MessageCommand.MerkleBlock ||
                command == MessageCommand.FilterLoad ||
                command == MessageCommand.FilterAdd;

            // Try compression
            if (tryCompression && message._payload_compressed.Length > CompressionMinSize)
            {
                var compressed = message._payload_compressed.CompressLz4();
                if (compressed.Length < message._payload_compressed.Length - CompressionThreshold)
                {
                    message._payload_compressed = compressed;
                    message.Flags |= MessageFlags.Compressed;
                }
            }

            return(message);
        }
Ejemplo n.º 2
0
 protected internal StackItem Convert(object value)
 {
     return(value switch
     {
         null => StackItem.Null,
         bool b => b,
         sbyte i => i,
         byte i => (BigInteger)i,
         short i => i,
         ushort i => (BigInteger)i,
         int i => i,
         uint i => i,
         long i => i,
         ulong i => i,
         Enum e => Convert(System.Convert.ChangeType(e, e.GetTypeCode())),
         byte[] data => data,
         string s => s,
         BigInteger i => i,
         IInteroperable interoperable => interoperable.ToStackItem(ReferenceCounter),
         ISerializable i => i.ToArray(),
         StackItem item => item,
         (object a, object b) => new Struct(ReferenceCounter)
         {
             Convert(a), Convert(b)
         },
         Array array => new VMArray(ReferenceCounter, array.OfType <object>().Select(p => Convert(p))),
         _ => StackItem.FromInterface(value)
     });
Ejemplo n.º 3
0
 public static StorageKey CreateStorageKey(this NativeContract contract, byte prefix, ISerializable key)
 {
     return(new StorageKey
     {
         Id = contract.Id,
         Key = key.ToArray().Prepend(prefix).ToArray()
     });
 }
Ejemplo n.º 4
0
        public static Message Create(MessageCommand command, ISerializable payload = null)
        {
            Message message = new Message
            {
                Flags               = MessageFlags.None,
                Command             = command,
                Payload             = payload,
                _payload_compressed = payload?.ToArray() ?? new byte[0]
            };

            // Try compression
            if (message._payload_compressed.Length > CompressionMinSize)
            {
                var compressed = message._payload_compressed.CompressLz4();
                if (compressed.Length < message._payload_compressed.Length - CompressionThreshold)
                {
                    message._payload_compressed = compressed;
                    message.Flags |= MessageFlags.Compressed;
                }
            }

            return(message);
        }
Ejemplo n.º 5
0
 public static ScriptBuilder EmitPush(this ScriptBuilder sb, ISerializable data)
 {
     return(sb.EmitPush(data.ToArray()));
 }
Ejemplo n.º 6
0
 public static Message Create(string command, ISerializable payload = null)
 {
     return(Create(command, payload == null ? new byte[0] : payload.ToArray()));
 }
Ejemplo n.º 7
0
 public static void Put(this WriteBatch batch, byte prefix, ISerializable key, ISerializable value)
 {
     batch.Put(SliceBuilder.Begin(prefix).Add(key), value.ToArray());
 }
Ejemplo n.º 8
0
 private static byte[] CreateKey(byte prefix, ISerializable key)
 {
     return(CreateKey(prefix, key.ToArray()));
 }
Ejemplo n.º 9
0
 public SliceBuilder Add(ISerializable value)
 {
     data.AddRange(value.ToArray());
     return(this);
 }
Ejemplo n.º 10
0
 internal protected StorageKey CreateStorageKey(byte prefix, ISerializable key)
 {
     return(CreateStorageKey(prefix, key.ToArray()));
 }
Ejemplo n.º 11
0
 private void Put(byte prefix, ISerializable key, ISerializable value)
 {
     _writeBatch.Put(Key(prefix, key), value.ToArray());
 }
Ejemplo n.º 12
0
 public SliceBuilder Add(ISerializable value)
 {
     TR.Enter();
     data.AddRange(value.ToArray());
     return(TR.Exit(this));
 }
Ejemplo n.º 13
0
 public static ScriptBuilder EmitPush(this ScriptBuilder sb, ISerializable data)
 {
     TR.Enter();
     return(TR.Exit(sb.EmitPush(data.ToArray())));
 }
Ejemplo n.º 14
0
 public static Message Create(string command, ISerializable payload = null)
 {
     return Create(command, payload == null ? new byte[0] : payload.ToArray());
 }