syntax = "proto3";

package aelf;

message Transaction {
  Address from = 1;
  Address to = 2;
  int64 ref_block_number = 3;
  bytes ref_block_prefix = 4;
  string method_name = 5;
  bytes params = 6;
  bytes signature = 10000;
}

// Common

message Address
{
  bytes value = 1;
}

message Hash
{
  bytes value = 1;
}

message MerklePath {
  repeated MerklePathNode merkle_path_nodes = 1;
}

message MerklePathNode{
  Hash hash = 1;
  bool is_left_child_node = 2;
}

message BinaryMerkleTree {
  repeated Hash nodes = 1;
  Hash root = 2;
  int32 leaf_count = 3;
}

message TransactionFeeCharged {
  string symbol = 1;
  int64 amount = 2;
}

message ResourceTokenCharged {
  string symbol = 1;
  int64 amount = 2;
  aelf.Address contract_address = 3;
}

message ResourceTokenOwned {
  string symbol = 1;
  int64 amount = 2;
}
