예제 #1
0
        private object ReadAction(byte[] data, Core.Api.v1.Action action, Abi abi, ref int readIndex)
        {
            if (action == null)
            {
                throw new ArgumentNullException("action");
            }

            var size = Convert.ToInt32(ReadVarUint32(data, ref readIndex));

            action.authorization = new List <PermissionLevel>(size);
            for (var i = 0; i < size; i++)
            {
                action.authorization.Add((PermissionLevel)ReadPermissionLevel(data, ref readIndex));
            }

            var abiAction = abi.actions.First(aa => aa.name == action.name);
            var abiStruct = abi.structs.First(s => s.name == abiAction.type);

            var dataSize = Convert.ToInt32(ReadVarUint32(data, ref readIndex));

            action.data = ReadAbiStruct(data, abiStruct, abi, ref readIndex);

            action.hex_data = (string)ReadString(data, ref readIndex);

            return(action);
        }
예제 #2
0
        private void WriteAction(MemoryStream ms, Core.Api.v1.Action action, Abi abi)
        {
            WriteName(ms, action.account);
            WriteName(ms, action.name);

            WriteVarUint32(ms, (UInt32)action.authorization.Count);
            foreach (var perm in action.authorization)
            {
                WritePermissionLevel(ms, perm);
            }

            WriteBytes(ms, SerializeActionData(action, abi));
        }
예제 #3
0
        public byte[] SerializeActionData(Core.Api.v1.Action action, Abi abi)
        {
            var abiAction = abi.actions.FirstOrDefault(aa => aa.name == action.name);

            if (abiAction == null)
            {
                throw new ArgumentException(string.Format("action name {0} not found on abi.", action.name));
            }

            var abiStruct = abi.structs.FirstOrDefault(s => s.name == abiAction.type);

            if (abiStruct == null)
            {
                throw new ArgumentException(string.Format("struct type {0} not found on abi.", abiAction.type));
            }

            using (MemoryStream ms = new MemoryStream())
            {
                WriteAbiStruct(ms, action.data, abiStruct, abi);
                return(ms.ToArray());
            }
        }