# In Elements there is no block subsidy. In a production sidechain, `initialfreecoins` # will likely be set to zero, necessitating peg-in functionality to get a policy asset. e1.createwallet("wallet1") e2.createwallet("wallet2") # Because of https://github.com/ElementsProject/elements/issues/956 we need to run # `rescanblockchain` after creating the wallets to detect the `TRUE` outputs assert e1["initialfreecoins"] == "2100000000000000" assert e1.getwalletinfo()['balance'] == {'bitcoin': 0} e1.rescanblockchain() e2.rescanblockchain() assert e1.getwalletinfo()['balance'] == {'bitcoin': 21000000} assert e2.getwalletinfo()['balance'] == {'bitcoin': 21000000} # All the initial coins coins are in one UTXO assert len(e1.listunspent()) == 1 # ...and both nodes think they own it. This is a common situation when # using near-empty test chains, so be aware of it. assert e1.listunspent() == e2.listunspent() # Generate 10 blocks to demonstrate how block generation work. On our test chain, # each block has a subsidy of zero (this can be changed with `con_blocksubsidy`) # and sends the coins to an OP_TRUE output (this script can be changed with # the `-signblockscript` config). e1.generatetoaddress(10, e1.getnewaddress()) # The wallet does not recognize zero-valued outputs as being owned assert len(e1.listunspent()) == 1 assert e1.getwalletinfo()['balance'] == {'bitcoin': 21000000} # Synchronize the chains sync_all([e1, e2])
# 1d. Move the coins around on each wallet so that they do not share # any wallet transaction. (Otherwise they may fill in each others' # UTXO data, which is harmless but makes the tutorial harder to # follow.) alice.sendtoaddress(alice.getnewaddress(), alice.getbalance()["bitcoin"], "", "", True) carol.sendtoaddress(carol.getnewaddress(), carol.getbalance()["bitcoin"], "", "", True) carol.sendtoaddress(address=carol.getnewaddress(), amount=1000, assetlabel=issue["asset"]) sync_all([alice, carol]) alice.generatetoaddress(1, alice.getnewaddress()) sync_all([alice, carol]) # Define some variables and continue.. asset_ALT = issue["asset"] asset_BTC = alice.dumpassetlabels()["bitcoin"] assert len(alice.listunspent()) > 0 assert len(carol.listunspent()) > 0 ## 2. Construct a swap transaction in PSET format # # At this point node `alice` has 10.5MM "bitcoin" and node `carol` has 1000 of # a new asset. We want to do an atomic swap: 2500 BTC for 1000 of # the new asset. # print ("2. Create an unsigned swap transaction in PSET format.") # # Although PSBT2 was designed with coinjoining in mind, the RPC interface # currently does not support iteratively creating a transaction. So we must # create the coinjoin transaction using the raw transaction API. #