cryptoconditions icon indicating copy to clipboard operation
cryptoconditions copied to clipboard

Error on long subfulfillments

Open diminator opened this issue 8 years ago • 0 comments

After adding a certain amount of subconditions, the serializeUri fails:

Test vector attached

Stacktrace

  File "bigchaindb-server/bigchaindb/common/transaction.py", line 904, in
to_dict                                                                                                
    condition['uri'] = self.fulfillment.condition_uri                                                   
  File "cryptoconditions/fulfillment.py", line 154, in condition_uri                                                                             
    return self.condition.serialize_uri()                                                               
  File "cryptoconditions/fulfillment.py", line 142, in condition                                                                                 
    condition.hash = self.generate_hash()                                                               
  File "cryptoconditions/types/base_sha256.py", line 21, in generate_hash                                                                        
    self.write_hash_payload(hasher)                                                                     
  File "cryptoconditions/types/threshold_sha256.py", line 206, in write_hash_payload                                                             
    if c['type'] == FULFILLMENT                                                                         
  File "cryptoconditions/fulfillment.py", line 164, in condition_binary                                                                          
    return self.condition.serialize_binary()                                                            
  File "cryptoconditions/condition.py", line 244, in serialize_binary                                                                            
    writer.write_var_uint(self.max_fulfillment_length)                                                  
  File "cryptoconditions/lib/writer.py", line 50, in write_var_uint                                                                              
    buffer += bytes([value])                                                                            
ValueError: bytes must be in range(0, 256)                                                              

Test vector

{"id":"f018248e7793a9ad69300bcfb600420ceec9ae496a00244f3ac5a65e6d69ee7c","operation":"CREATE","outputs":[{"amount":1,"condition":{"details":{"type_id":2,"type":"fulfillment","bitmask":43,"threshold":2,"subfulfillments":[{"type_id":4,"bitmask":32,"signature":null,"public_key":"79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG","type":"fulfillment","weight":1},{"type_id":2,"type":"fulfillment","bitmask":11,"threshold":3,"subfulfillments":[{"type_id":0,"bitmask":3,"hash":"5wbD6GsVBReHetMUw17QcNne8BjB1xSKRoU4JYpafEx5","max_fulfillment_length":5,"type":"condition","weight":1},{"type_id":0,"bitmask":3,"hash":"EuNEkS8TUYaTngMPGiS3DHdApYBf2YYQVdg3hHHTnPDx","max_fulfillment_length":11,"type":"condition","weight":1},{"type_id":0,"bitmask":3,"hash":"Ay3VvUjfEnEhCWxJMGLGBpWTS5iu2nVB64wcsYkPnCqd","max_fulfillment_length":5,"type":"condition","weight":1},{"type_id":0,"bitmask":3,"hash":"H7nD6xkFRm99GzAxvA5JG8DQSZBEGdiUdnYuh7714vMW","max_fulfillment_length":10,"type":"condition","weight":1},{"type_id":0,"bitmask":3,"hash":"8EmZwLhhFAZ9QgHgHfgMokfQ2CfzXaLbyEz4uaXaJyq4","max_fulfillment_length":7,"type":"condition","weight":1},{"type_id":0,"bitmask":3,"hash":"DFf8KSmzgHEarJ2RPJmyDGTvnS8E8MjxkDNVjNsUN8Hr","max_fulfillment_length":8,"type":"condition","weight":1},{"type_id":0,"bitmask":3,"hash":"3qUBtEhzGazLRTM9c3JWKGPTnrkgxbtEoezh7WaJuJBS","max_fulfillment_length":3,"type":"condition","weight":1},{"type_id":0,"bitmask":3,"hash":"4w6YMt6nH3oSsA1uTk6Vmqvqsa9eSquKSAxWtDWPrzTg","max_fulfillment_length":4,"type":"condition","weight":1},{"type_id":0,"bitmask":3,"hash":"HT5nStZQ4x2ecqwZFiKtJWs14TVWiViNVrfFpEqpvf3u","max_fulfillment_length":5,"type":"condition","weight":1},{"type_id":0,"bitmask":3,"hash":"JBMM3eF7iEdJ9XxwSfHe4JrwkcFQExTsiCF4YSGyuJoH","max_fulfillment_length":3,"type":"condition","weight":1}],"weight":1}]},"uri":"cc:2:2b:RnwQdfUJUqPi-zhtS-5WeijFScfyxo2tUVL56T6rQXQ:439"},"public_keys":["79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG"]}],"inputs":[{"fulfillment":"cf:4:W0dEBH4MFkphXyUzeuY04q8z2visobk5dtiggDfGdOfdku6Uawyk3SF0B6mWirTC6XC7CaWCKi62xRDXnWXQ_yl-A-Ihi315r65IpGf1AIJhLryNx1rcKocczKUCsAsB","fulfills":null,"owners_before":["79K8SPZbeSDYXBrWgt3dsNmYTZbKNtdYQ5XrjA9XEWfG"]}],"metadata":null,"asset":{"data":{"item":"shirt","frequency":10,"timestamp":"1493634802"}},"version":"0.9"}

diminator avatar May 01 '17 10:05 diminator