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); }
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)); }
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()); } }