syntax = "proto3"; package bc; message Hash { fixed64 v0 = 1; fixed64 v1 = 2; fixed64 v2 = 3; fixed64 v3 = 4; } message Program { uint64 vm_version = 1; bytes code = 2; } // This message type duplicates Hash, above. One alternative is to // embed a Hash inside an AssetID. But it's useful for AssetID to be // plain old data (without pointers). Another alternative is use Hash // in any protobuf types where an AssetID is called for, but it's // preferable to have type safety. message AssetID { fixed64 v0 = 1; fixed64 v1 = 2; fixed64 v2 = 3; fixed64 v3 = 4; } message AssetAmount { AssetID asset_id = 1; uint64 amount = 2; } message ValueSource { Hash ref = 1; AssetAmount value = 2; uint64 position = 3; } message ValueDestination { Hash ref = 1; AssetAmount value = 2; uint64 position = 3; } message BlockHeader { uint64 version = 1; uint64 height = 2; Hash previous_block_id = 3; uint64 timestamp = 4; Hash transactions_root = 5; Hash transaction_status_hash = 6; TransactionStatus transaction_status = 7; repeated bytes witness_arguments = 8; } message TxHeader { uint64 version = 1; uint64 serialized_size = 2; uint64 time_range = 3; repeated Hash result_ids = 4; } message TxVerifyResult { bool status_fail = 1; } message TransactionStatus { uint64 version = 1; repeated TxVerifyResult verify_status = 2; } message Mux { repeated ValueSource sources = 1; // issuances, spends, and muxes Program program = 2; repeated ValueDestination witness_destinations = 3; // outputs, retirements, and muxes repeated bytes witness_arguments = 4; } message Coinbase { ValueDestination witness_destination = 1; bytes arbitrary = 2; } message IntraChainOutput { ValueSource source = 1; Program control_program = 2; uint64 ordinal = 3; } message CrossChainOutput { ValueSource source = 1; Program control_program = 2; uint64 ordinal = 3; } message VoteOutput { ValueSource source = 1; Program control_program = 2; uint64 ordinal = 3; bytes vote = 4; } message Retirement { ValueSource source = 1; uint64 ordinal = 2; } message Spend { Hash spent_output_id = 1; ValueDestination witness_destination = 2; repeated bytes witness_arguments = 3; uint64 ordinal = 4; } message CrossChainInput { Hash mainchain_output_id = 1; AssetAmount value = 2; ValueDestination witness_destination = 3; Program control_program = 4; repeated bytes witness_arguments = 5; uint64 ordinal = 6; }