for tx in sidechain.batch_([["getrawtransaction", txhash, 1] for txhash in block["tx"]]): self.check_tx(tx) if self.in_value > self.target_value: break if self.in_value > self.target_value: break assert (self.in_value > self.target_value) try: if args.command == "generate-one-of-one-multisig": if args.wallet == "sidechain-wallet": address = sidechain.getnewaddress() p2sh_res = sidechain.addmultisigaddress(1, [address]) elif args.wallet == "mainchain-wallet": address = bitcoin.getnewaddress() p2sh_res = bitcoin.addmultisigaddress(1, [address]) print("One-of-one address: %s" % address) print("P2SH address: %s" % p2sh_res) elif args.command == "send-to-sidechain": cht = os.popen("%s %s -g -r %s -d %s" % (contracthashtool_path, testnet_arg, redeem_script, args.p2shSideAddress)) cht_read = cht.read() nonce = cht_read.split("\n")[0 + is_testnet][7:] full_contract = cht_read.split("\n")[1 + is_testnet][26:] send_address = cht_read.split("\n")[3 + is_testnet][40:] assert (cht.close() == None) if full_contract[0:8] != "50325348":
# Educational Purposes only # Python 2.7.6 and relies on bitcoind & bitcoinrpc & wobine's github connection file # We had to change the bitcoinrpc 'connection.py' file to add multisig support # https://github.com/wobine/blackboard101/blob/master/wbn_multisigs_pt1_create-address.py # Modify: # ask private key from user. so we could use the code in real situation from bitcoinrpc.authproxy import AuthServiceProxy bitcoin = AuthServiceProxy( "http://*****:*****@127.0.0.1:8332" ) #creates an object called 'bitcoin' that allows for bitcoind calls pubkey = dict() print "Please input your pubKey, which is the oubput of command [validate address]" pubkey[0] = str(raw_input("Please input the pubkey owned by Partner 1£º")) pubkey[1] = str(raw_input("Please input the pubkey owned by Partner 2£º")) pubkey[2] = str(raw_input("Please input the pubkey owned by Partner 3£º")) n = int(raw_input("Please input the number which can sign the address£º")) threeaddy = [pubkey[0], pubkey[1], pubkey[2]] print "The multi-sig address is £º" multisigaddy = bitcoin.addmultisigaddress(n, threeaddy) multiaddyandredeem = (bitcoin.createmultisig(n, threeaddy)) print len(multisigaddy), "chars - ", multisigaddy print print "redeemScript -", len(multiaddyandredeem["redeemScript"] ), "chars -", multiaddyandredeem["redeemScript"] print print "Now you can copy all this ouput text and save it so you'll be ready for spend it"
print "Addresses and priv keys in entire wallet" addresses = bitcoin.getaddressesbyaccount("") print addresses for add in addresses: if not add[0] == '2': print bitcoin.dumpprivkey(add), add ## Create a multi-sig print "" print "Multi sig address" adds = [pubkeymine, pubkeymike] print "Addresses used", adds multi = bitcoin.addmultisigaddress(2, adds) multi = bitcoin.createmultisig(2, adds) print multi """ print "" print "Unspent transactions" unspent = bitcoin.listunspent() for x in unspent: print x print "---" if x['address'] == multiaddress: print "Unspent Multi: " print x
# Python 2.7.6 and relies on bitcoind & bitcoinrpc & wobine's github connection file # We had to change the bitcoinrpc 'connection.py' file to add multisig support # https://github.com/wobine/blackboard101/blob/master/wbn_multisigs_pt1_create-address.py from bitcoinrpc.authproxy import AuthServiceProxy bitcoin = AuthServiceProxy("http://*****:*****@127.0.0.1:8332") #creates an object called 'bitcoin' that allows for bitcoind calls pubkey = dict() print "请输入公钥,公钥可以由命令[validate address]的输出pubKey字段得到" pubkey[0] = str(raw_input("请输入管理者1的公钥:")) pubkey[1] = str(raw_input("请输入管理者2的公钥:")) pubkey[2] = str(raw_input("请输入管理者3的公钥:")) n = int(raw_input("请输入几个私钥可以解锁:")) threeaddy = [pubkey[0],pubkey[1],pubkey[2]] print "多重签名地址是:" multisigaddy = bitcoin.addmultisigaddress(n,threeaddy) multiaddyandredeem = (bitcoin.createmultisig(n,threeaddy)) print len(multisigaddy),"chars - ", multisigaddy print print "redeemScript -", len(multiaddyandredeem["redeemScript"]), "chars -",multiaddyandredeem["redeemScript"] print print "现在可以把上面的输出都存起来,方便以后花费时构建输出单"
else: block = sidechain.getblock(sidechain.getblockhash(i)) for tx in sidechain.batch_([["getrawtransaction", txhash, 1] for txhash in block["tx"]]): self.check_tx(tx) if self.in_value > self.target_value: break if self.in_value > self.target_value: break assert(self.in_value > self.target_value) try: if args.command == "generate-one-of-one-multisig": if args.wallet == "sidechain-wallet": address = sidechain.getnewaddress() p2sh_res = sidechain.addmultisigaddress(1, [address]) elif args.wallet == "mainchain-wallet": address = bitcoin.getnewaddress() p2sh_res = bitcoin.addmultisigaddress(1, [address]) print("One-of-one address: %s" % address) print("P2SH address: %s" % p2sh_res) elif args.command == "send-to-sidechain": cht = os.popen("%s %s -g -r %s -d %s" % (contracthashtool_path, testnet_arg, redeem_script, args.p2shSideAddress)) cht_read = cht.read() nonce = cht_read.split("\n")[0 + is_testnet][7:] full_contract = cht_read.split("\n")[1 + is_testnet][26:] send_address = cht_read.split("\n")[3 + is_testnet][40:] assert(cht.close() == None) if full_contract[0:8] != "50325348": print("You must use a P2SH address") exit(1)