Skip to content

Commit

Permalink
feat: adapt new sign logic
Browse files Browse the repository at this point in the history
  • Loading branch information
shaojunda committed Oct 31, 2019
1 parent a1f8dbe commit 477b5dd
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 9 deletions.
2 changes: 1 addition & 1 deletion lib/ckb/serializers/bytes_opt_serializer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class BytesOptSerializer
# @param bytes [String]
def initialize(bytes = "")
bytes = bytes.start_with?("0x") ? bytes[2..-1] : bytes
binding.pry

if !bytes.empty?
items = bytes.scan(/../)
@bytes_serializer = FixVecSerializer.new(items, ByteSerializer)
Expand Down
24 changes: 16 additions & 8 deletions lib/ckb/types/transaction.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# frozen_string_literal: true

module CKB
module Types
class Transaction
Expand Down Expand Up @@ -38,16 +37,25 @@ def initialize(
def sign(key, tx_hash)
raise "Invalid number of witnesses!" if witnesses.length < inputs.length

signed_witnesses = witnesses.map do |witness|
dummy_witness_for_input_lock = "0x#{'0' * 130}"
witness_args_serializer = CKB::Serializers::WitnessArgsSerializer.new(witness_for_input_lock: dummy_witness_for_input_lock)
serialized_witness_args = witness_args_serializer.serialize

blake2b = CKB::Blake2b.new
blake2b.update(Utils.hex_to_bin(tx_hash))
witness_len_bytes = "0x#{[witness_args_serializer.capacity].pack("V").unpack("H*").first}"
blake2b.update(Utils.hex_to_bin(witness_len_bytes))
blake2b.update(Utils.hex_to_bin(serialized_witness_args))

signed_witnesses = witnesses[1..-1].map do |witness|
old_datum = witness
blake2b = CKB::Blake2b.new
blake2b.update(Utils.hex_to_bin(tx_hash))
witness_len_bytes = "0x#{[Utils.hex_to_bin(old_datum).bytesize].pack("V").unpack("H*").first}"
blake2b.update(Utils.hex_to_bin(witness_len_bytes))
blake2b.update(Utils.hex_to_bin(old_datum))
message = blake2b.hexdigest
data = key.sign_recoverable(message) + old_datum[2..-1]

data
end
message = blake2b.hexdigest
signature = key.sign_recoverable(message)
signed_witnesses.unshift CKB::Serializers::WitnessArgsSerializer.new(witness_for_input_lock: signature).serialize

self.class.new(
hash: tx_hash, # using real tx_hash instead
Expand Down

0 comments on commit 477b5dd

Please sign in to comment.