Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/rpc/blockchain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3684,6 +3684,9 @@ static RPCHelpMan getsidechaininfo()
{{RPCResult::Type::STR_HEX, "", "active fedpegscript"}}},
{RPCResult::Type::STR_HEX, "pegged_asset", "Pegged asset type"},
{RPCResult::Type::STR_HEX, "fee_asset", "The asset used for transaction fees and relay policy"},
{RPCResult::Type::STR_AMOUNT, "genesis_subsidy", "The block subsidy at genesis, before any halving"},
{RPCResult::Type::STR_HEX, "subsidy_asset", "The asset in which the block subsidy is paid"},
{RPCResult::Type::NUM, "subsidy_halving_interval", "The number of blocks between block subsidy halvings"},
{RPCResult::Type::STR, "min_peg_diff", "The minimum difficulty parent chain header target. Peg-in headers that have less work will be rejected as an anti-Dos measure"},
{RPCResult::Type::STR_HEX, "parent_blockhash", "The parent genesis blockhash as source of pegged-in funds"},
{RPCResult::Type::BOOL, "parent_chain_has_pow", "Whether parent chain has pow or signed blocks"},
Expand Down Expand Up @@ -3726,6 +3729,9 @@ static RPCHelpMan getsidechaininfo()
obj.pushKV("current_fedpegscripts", fedpeg_entries);
obj.pushKV("pegged_asset", consensus.pegged_asset.GetHex());
obj.pushKV("fee_asset", policyAsset.GetHex());
obj.pushKV("genesis_subsidy", ValueFromAmount(consensus.genesis_subsidy));
obj.pushKV("subsidy_asset", consensus.subsidy_asset.GetHex());
obj.pushKV("subsidy_halving_interval", consensus.nSubsidyHalvingInterval);
obj.pushKV("min_peg_diff", consensus.parentChainPowLimit.GetHex());
obj.pushKV("parent_blockhash", parent_blockhash.GetHex());
obj.pushKV("parent_chain_has_pow", consensus.ParentChainHasPow());
Expand Down
56 changes: 44 additions & 12 deletions test/functional/rpc_sidechaininfo.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,66 @@
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
"""Test the getsidechaininfo fee-asset contract."""

from copy import deepcopy
from decimal import Decimal

from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import BITCOIN_ASSET, assert_equal, assert_is_hash_string
from test_framework.util import BITCOIN_ASSET, assert_equal


DEFAULT_INFO = {
"fedpegscript": "51",
"current_fedpeg_programs": ["a91472c44f957fc011d97e3406667dca5b1c930c402687"],
"current_fedpegscripts": ["51"],
"pegged_asset": BITCOIN_ASSET,
"fee_asset": BITCOIN_ASSET,
"genesis_subsidy": Decimal("50.00000000"),
"subsidy_asset": BITCOIN_ASSET,
"subsidy_halving_interval": 150,
"min_peg_diff": "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"parent_blockhash": "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206",
"parent_chain_has_pow": True,
"enforce_pak": False,
"pegin_confirmation_depth": 8,
}
OVERRIDE_FEE_ASSET = "11" * 32
BLOCKSUBSIDY_INFO = {
"genesis_subsidy": 0,
"subsidy_asset": "aa" * 32,
"subsidy_halving_interval": 10,
}


class SidechainInfoTest(BitcoinTestFramework):
def set_test_params(self):
self.num_nodes = 2
self.num_nodes = 3
self.setup_clean_chain = True
self.extra_args = [[], [f"-feeasset={OVERRIDE_FEE_ASSET}"]]
self.extra_args = [
# node 0: default
[],
# node 1: override feeasset
[f"-feeasset={OVERRIDE_FEE_ASSET}"],
# node 2: override blocksubsidy params
[
f"-con_blocksubsidy={BLOCKSUBSIDY_INFO['genesis_subsidy']}",
f"-con_nsubsidyhalvinginterval={BLOCKSUBSIDY_INFO['subsidy_halving_interval']}",
f"-subsidyasset={BLOCKSUBSIDY_INFO['subsidy_asset']}",
]
]

def setup_network(self):
self.setup_nodes()

def run_test(self):
default_info = self.nodes[0].getsidechaininfo()
override_info = self.nodes[1].getsidechaininfo()
assert_equal(self.nodes[0].getsidechaininfo(), DEFAULT_INFO)

for info in [default_info, override_info]:
assert_is_hash_string(info["pegged_asset"])
assert_is_hash_string(info["fee_asset"])
assert_equal(info["pegged_asset"], BITCOIN_ASSET)
info = deepcopy(DEFAULT_INFO)
info.update({"fee_asset": OVERRIDE_FEE_ASSET})
assert_equal(self.nodes[1].getsidechaininfo(), info)

assert_equal(default_info["fee_asset"], default_info["pegged_asset"])
assert_equal(override_info["fee_asset"], OVERRIDE_FEE_ASSET)
assert_equal(override_info["pegged_asset"], default_info["pegged_asset"])
info = deepcopy(DEFAULT_INFO)
info.update(BLOCKSUBSIDY_INFO)
assert_equal(self.nodes[2].getsidechaininfo(), info)


if __name__ == "__main__":
Expand Down
Loading