Guest User

Untitled

a guest
Feb 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.66 KB | None | 0 0
  1. # Here the Bitcoin protocol jargon is configured
  2. # via the public APIs exposed by configurator.rb
  3.  
  4. Bitcoin::Protocol.configure do
  5. # Constants
  6. register_constant :MAGIC, :production => 0xD9B4BEF9,
  7. :test => 0xDAB5BFFA
  8.  
  9. register_constant :VERSION, 318
  10. register_constant :SUB_VERSION, '.1'
  11.  
  12. register_constant :MESSAGE_SIZE_LIMIT, 50_000
  13.  
  14. register_constant :SERVICES, {:node_network => 1}
  15.  
  16. # Types
  17. register_type :address do |t|
  18. t.uint64_little :services, :default => 1
  19. t.uint128_network :ip_address
  20. t.uint16_network :port
  21. end
  22.  
  23. register_type :transaction do |t|
  24. t.int32_little :version, :default => 1
  25. t.tx_input_vector :inputs
  26. t.tx_output_vector :outputs
  27. t.uint32_little :lock_time
  28. end
  29.  
  30. register_type :tx_input do |t|
  31. t.out_point :previous
  32. t.string :script_signature, :default => ""
  33. t.uint32_little :sequence, :default => 0
  34. end
  35.  
  36. register_type :tx_output do |t|
  37. t.int64_little :value
  38. t.string :script_public_key, :default => ""
  39. end
  40.  
  41. register_type :out_point do |t|
  42. t.uint256_little :hash, :default => 0
  43. t.uint32_little :size
  44. end
  45.  
  46. register_constant :INVENTORY_TYPES, {:error => 0, :tx => 1, :block => 2}
  47.  
  48. register_type :inventory do |t|
  49. t.int32_little :type, :default => [:INVENTORY_TYPES, :error]
  50. t.uint256_little :hash, :default => 0
  51. end
  52.  
  53. register_type :block_locator do |t|
  54. t.int32_little :version, :default => :VERSION
  55. t.uint256_little_vector :available_hashes
  56. end
  57.  
  58. # Messages
  59. register_message :version do |m|
  60. m.uint32_little :version, :default => :VERSION
  61. m.uint64_little :services, :default => [:SERVICES, :node_network]
  62. m.int64_little :time, :default => lambda { Time.now.to_i }
  63. m.address :origin, :default => "lambda { nil }"
  64. m.address :destination
  65. m.int64_little :nonce, :default => lambda { rand(2**64) }
  66. m.string :sub_version, :default => :SUB_VERSION, :size => 4
  67. m.int32_little :starting_height, :default => nil
  68. end
  69.  
  70. register_message :verack, :alias => :version_ack
  71.  
  72. register_message :addr, :alias => :addresses, :size_limit => 1000 do |m|
  73. m.address_vector :addresses
  74. end
  75.  
  76. register_message :inv, :alias => :inventory, :size_limit => true do |m|
  77. m.inventory_vector :inventory
  78. end
  79.  
  80. register_message :getdata, :alias => :get_data, :size_limit => true do |m|
  81. m.inventory_vector :inventory
  82. end
  83.  
  84. register_message :getblocks, :alias => :get_blocks do |m|
  85. m.block_locator :locator
  86. m.uint256_little :hash_stop
  87. end
  88.  
  89. register_message :tx, :alias => :transaction do |m|
  90. m.transaction :transaction
  91. end
  92.  
  93. register_message :block do |m|
  94. m.int32_little :version, :default => :VERSION
  95. m.uint256_little :hash_previous_block
  96. m.uint256_little :hash_merkle_root
  97. m.uint32_little :time
  98. m.compact_target :bits
  99. m.uint32_little :nonce
  100. m.transaction_vector :transactions
  101. end
  102.  
  103. register_message :getaddr, :alias => :get_addresses
  104.  
  105. register_message :checkorder, :alias => :check_order
  106.  
  107. register_message :submitorder, :alias => :submit_order
  108.  
  109. register_message :reply
  110.  
  111. register_message :ping
  112.  
  113. register_message :alert
  114.  
  115. register_sequence :initialize, :request => :version, :response => :verack
  116. register_sequence :identificate_peer, :request => :getaddr, :response => :addr
  117. register_sequence :bootstrap_blocks, :request => :getblocks, :response => :inv
  118. end
Add Comment
Please, Sign In to add comment