Merge branch 'main' into fix/operator-dockerfile

This commit is contained in:
undercover-cactus 2026-02-04 10:52:51 +01:00 committed by GitHub
commit 2f7d8a368f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
108 changed files with 13177 additions and 419 deletions

View file

@ -8,6 +8,7 @@
"**/*.yml",
"**/*.md",
"!node_modules/*",
"!**/moonwall/**/*",
"!target/*",
"!**/tmp/*",
"!**/*.spec.json",

View file

@ -29,7 +29,9 @@
"rewardsInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955",
"vetoCommitteeMember": "0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f",
"vetoWindowBlocks": 100,
"validatorsStrategies": []
"validatorsStrategies": [
"0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0"
]
},
"snowbridge": {
"randaoCommitDelay": 4,
@ -37,10 +39,12 @@
"minNumRequiredSignatures": 2,
"startBlock": 1,
"rewardsMessageOrigin": "0x0000000000000000000000000000000000000000000000000000000000000000",
"initialValidatorSetId": 0,
"initialValidatorHashes": [
"0xaeb47a269393297f4b0a3c9c9cfd00c7a4195255274cf39d83dabc2fcc9ff3d7",
"0xf68aec7304bf37f340dae2ea20fb5271ee28a3128812b84a615da4789e458bde"
],
"nextValidatorSetId": 1,
"nextValidatorHashes": [
"0xaeb47a269393297f4b0a3c9c9cfd00c7a4195255274cf39d83dabc2fcc9ff3d7",
"0xf68aec7304bf37f340dae2ea20fb5271ee28a3128812b84a615da4789e458bde"

View file

@ -74,7 +74,19 @@
/// The number of blocks that the Veto Committee will have to submit a veto.
"vetoWindowBlocks": 100,
/// The EigenLayer strategy addresses for the Validators to stake into.
"validatorsStrategies": []
/// The beaconChainETHStrategy is a virtual address representing native beacon chain ETH.
/// All networks:
/// - beaconChainETH: 0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0 (virtual, same on all networks)
/// Hoodi testnet strategies:
/// - stETH: 0xf8a1a66130d614c7360e868576d5e59203475fe0
/// - WETH: 0x24579aD4fe83aC53546E5c2D3dF5F85D6383420d
/// Mainnet strategies:
/// - stETH: 0x93c4b944D05dfe6df7645A86cd2206016c51564D
/// - rETH: 0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2
/// - cbETH: 0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc
"validatorsStrategies": [
"0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0"
]
},
"snowbridge": {
/// Minimum delay in number of blocks that a relayer must wait between calling
@ -86,18 +98,27 @@
/// they desire.
"randaoCommitExpiration": 24,
/// The minimum number of required signatures for a Randao commit to be valid.
/// Auto-calculated by update-beefy-checkpoint as ceil(validators * 2/3) for BFT security.
"minNumRequiredSignatures": 2,
/// Initial BEEFY block number.
/// Initial BEEFY block number. Set to latest finalized block by update-beefy-checkpoint.
/// The BeefyClient will only accept BEEFY commitments with block numbers > startBlock.
"startBlock": 1,
/// The origin linked to the Rewards Agent, the Agent contract who's allowed to submit
/// new reward merkle roots to the RewardsRegistry contract.
"rewardsMessageOrigin": "0x0000000000000000000000000000000000000000000000000000000000000000",
/// The BEEFY validator set ID for the initial validators.
/// This is fetched from Beefy.ValidatorSetId on the DataHaven chain.
"initialValidatorSetId": 0,
/// The initial validator hashes for the BEEFY light client.
/// Each hash is keccak256(ethereum_address) derived from the BEEFY authority public keys.
"initialValidatorHashes": [
"0x8626f6940e2eb28930efb4cef49b2d1f2c9c1199914b9e5506744e80bd0fd33d",
"0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e"
],
/// The BEEFY validator set ID for the next validators (initialValidatorSetId + 1).
"nextValidatorSetId": 1,
/// The next validator hashes for the BEEFY light client.
/// Each hash is keccak256(ethereum_address) derived from the BEEFY authority public keys.
"nextValidatorHashes": [
"0x8626f6940e2eb28930efb4cef49b2d1f2c9c1199914b9e5506744e80bd0fd33d",
"0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e"

View file

@ -0,0 +1,54 @@
{
"eigenLayer": {
"pausers": [],
"unpauser": "0x0000000000000000000000000000000000000000",
"rewardsUpdater": "0x0000000000000000000000000000000000000000",
"calculationIntervalSeconds": 86400,
"maxRewardsDuration": 6048000,
"maxRetroactiveLength": 7776000,
"maxFutureLength": 2592000,
"genesisRewardsTimestamp": 1710979200,
"activationDelay": 7200,
"globalCommissionBips": 1000,
"executorMultisig": "0x0000000000000000000000000000000000000000",
"operationsMultisig": "0x0000000000000000000000000000000000000000",
"minWithdrawalDelayBlocks": 50400,
"delegationInitPausedStatus": 0,
"eigenPodManagerInitPausedStatus": 0,
"rewardsCoordinatorInitPausedStatus": 0,
"allocationManagerInitPausedStatus": 0,
"deallocationDelay": 100800,
"allocationConfigurationDelay": 1200,
"beaconChainGenesisTimestamp": 1606824023,
"delegationManager": "0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A",
"strategyManager": "0x858646372CC42E1A627fcE94aa7A7033e7CF075A",
"eigenPodManager": "0x91E677b07F7AF907ec9a428aafA9fc14a0d3A338",
"avsDirectory": "0x135dda560e946695d6f155dacafc6f1f25c1f5af",
"rewardsCoordinator": "0x7750d328b314EfFa365A0402CcfD489B80B0adda",
"allocationManager": "0x948a420b8CC1d6BFd0B6087C2E7c344a2CD0bc39",
"permissionController": "0x25E5F8B1E7aDf44518d35D5B2271f114e081f0E5"
},
"avs": {
"avsOwner": "0x0000000000000000000000000000000000000000",
"rewardsInitiator": "0x0000000000000000000000000000000000000000",
"vetoCommitteeMember": "0x0000000000000000000000000000000000000000",
"vetoWindowBlocks": 7200,
"validatorsStrategies": [
"0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0",
"0x93c4b944D05dfe6df7645A86cd2206016c51564D",
"0x1BeE69b7dFFfA4E2d53C2a2Df135C388AD25dCD2",
"0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc"
]
},
"snowbridge": {
"randaoCommitDelay": 4,
"randaoCommitExpiration": 24,
"minNumRequiredSignatures": 16,
"startBlock": 1,
"rewardsMessageOrigin": "0x0000000000000000000000000000000000000000000000000000000000000000",
"initialValidatorSetId": 0,
"initialValidatorHashes": [],
"nextValidatorSetId": 1,
"nextValidatorHashes": []
}
}

View file

@ -27,7 +27,7 @@
"eigenPodManager": "0xcd1442415Fc5C29Aa848A49d2e232720BE07976c",
"avsDirectory": "0xD58f6844f79eB1fbd9f7091d05f7cb30d3363926",
"rewardsCoordinator": "0x29e8572678e0c272350aa0b4B8f304E47EBcd5e7",
"allocationManager": "0x95a7431400F362F3647a69535C5666cA0133CAA0",
"allocationManager": "0x95a7431400F362F3647a69535C5666cA0133CAA0",
"permissionController": "0xdcCF401fD121d8C542E96BC1d0078884422aFAD2"
},
"avs": {
@ -35,21 +35,31 @@
"rewardsInitiator": "0xe30a38ac89ffE5A86D5389Bfbf70C7EC766FbB6e",
"vetoCommitteeMember": "0xe30a38ac89ffE5A86D5389Bfbf70C7EC766FbB6e",
"vetoWindowBlocks": 100,
"validatorsStrategies": []
"validatorsStrategies": [
"0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0",
"0xf8a1a66130d614c7360e868576d5e59203475fe0",
"0x24579aD4fe83aC53546E5c2D3dF5F85D6383420d"
]
},
"snowbridge": {
"randaoCommitDelay": 4,
"randaoCommitExpiration": 24,
"minNumRequiredSignatures": 2,
"startBlock": 1,
"rewardsMessageOrigin": "0x0000000000000000000000000000000000000000000000000000000000000000",
"minNumRequiredSignatures": 3,
"startBlock": 1299215,
"rewardsMessageOrigin": "0x56490bd3f367447bfaf57bb18e7a45e1b2db7d538fe42098e87d2aa106c6afdd",
"initialValidatorSetId": 2179,
"initialValidatorHashes": [
"0xaeb47a269393297f4b0a3c9c9cfd00c7a4195255274cf39d83dabc2fcc9ff3d7",
"0xf68aec7304bf37f340dae2ea20fb5271ee28a3128812b84a615da4789e458bde"
"0x07ce4f2cd558f4d4b529a3362b6ff7d616ca0893b53252dc62829b8218ea5c10",
"0xaea5344f086d3be7c94cf3a47436bcbb98de23cf1ee773a9180cfecab0453a50",
"0xcd3a33755b27fe810dfb780b3f1df1c25efa1bb826ca618e41022fa900876087",
"0x4f4ce8cad711a4b33d15095091f8a98eaf9bfd1b39a9159e605cf5d6783cc667"
],
"nextValidatorSetId": 2180,
"nextValidatorHashes": [
"0xaeb47a269393297f4b0a3c9c9cfd00c7a4195255274cf39d83dabc2fcc9ff3d7",
"0xf68aec7304bf37f340dae2ea20fb5271ee28a3128812b84a615da4789e458bde"
"0x07ce4f2cd558f4d4b529a3362b6ff7d616ca0893b53252dc62829b8218ea5c10",
"0xaea5344f086d3be7c94cf3a47436bcbb98de23cf1ee773a9180cfecab0453a50",
"0xcd3a33755b27fe810dfb780b3f1df1c25efa1bb826ca618e41022fa900876087",
"0x4f4ce8cad711a4b33d15095091f8a98eaf9bfd1b39a9159e605cf5d6783cc667"
]
}
}
}

View file

@ -0,0 +1,71 @@
{
"eigenLayer": {
"pausers": [
"0x64D78399B0fa32EA72959f33edCF313159F3c13D"
],
"unpauser": "0xE3328cb5068924119d6170496c4AB2dD12c12d15",
"rewardsUpdater": "0xe30a38ac89ffE5A86D5389Bfbf70C7EC766FbB6e",
"calculationIntervalSeconds": 86400,
"maxRewardsDuration": 6048000,
"maxRetroactiveLength": 7776000,
"maxFutureLength": 2592000,
"genesisRewardsTimestamp": 1710979200,
"activationDelay": 7200,
"globalCommissionBips": 1000,
"executorMultisig": "0xE3328cb5068924119d6170496c4AB2dD12c12d15",
"operationsMultisig": "0xE7f4E30D2619273468afe9EC0Acf805E55532257",
"minWithdrawalDelayBlocks": 50,
"delegationInitPausedStatus": 0,
"eigenPodManagerInitPausedStatus": 0,
"rewardsCoordinatorInitPausedStatus": 0,
"allocationManagerInitPausedStatus": 0,
"deallocationDelay": 50,
"allocationConfigurationDelay": 75,
"beaconChainGenesisTimestamp": 1710666600,
"delegationManager": "0x867837a9722C512e0862d8c2E15b8bE220E8b87d",
"strategyManager": "0xeE45e76ddbEDdA2918b8C7E3035cd37Eab3b5D41",
"eigenPodManager": "0xcd1442415Fc5C29Aa848A49d2e232720BE07976c",
"avsDirectory": "0xD58f6844f79eB1fbd9f7091d05f7cb30d3363926",
"rewardsCoordinator": "0x29e8572678e0c272350aa0b4B8f304E47EBcd5e7",
"allocationManager": "0x95a7431400F362F3647a69535C5666cA0133CAA0",
"permissionController": "0xdcCF401fD121d8C542E96BC1d0078884422aFAD2"
},
"avs": {
"avsOwner": "0x0000000000000000000000000000000000000000",
"rewardsInitiator": "0x0000000000000000000000000000000000000000",
"vetoCommitteeMember": "0x0000000000000000000000000000000000000000",
"vetoWindowBlocks": 100,
"validatorsStrategies": [
"0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0",
"0xf8a1a66130d614c7360e868576d5e59203475fe0",
"0x24579aD4fe83aC53546E5c2D3dF5F85D6383420d"
]
},
"snowbridge": {
"randaoCommitDelay": 4,
"randaoCommitExpiration": 24,
"minNumRequiredSignatures": 5,
"startBlock": 1381173,
"rewardsMessageOrigin": "0xd0d6dbd1ffb401ef613f00e93cd5061ecec03ae35d2f820cd6754a5b5f020215",
"initialValidatorSetId": 2303,
"initialValidatorHashes": [
"0x0ec3102f334aba804c18b843e45ec874005587122a1b49273b1b04d6fd98b1a2",
"0xb277ac8a7aafc125d7da813a9b0fdae144922c165bfae194ebd94d6f3e4fe68e",
"0xcc6aefdce3f83d204893cb57388a72b4553b613f95b437ce548582470e62d1e7",
"0xcefa9940d25d21ac6d0a579727e8812283ed00d7ace9dfc9e30a0f95a0ea7bdd",
"0x8e720aed537cb30d204f1de9fb5aab6e0129acfc3f41a3c69259231c1f0f2685",
"0x5f883131cf6667cb8c2279caa182298e174bbca35c7c8c5679df6bad73be85cf",
"0x744ae85e99103a5ebcf9dd2fdcc18743012f0336f497fd3a05243a26a1a031b7"
],
"nextValidatorSetId": 2304,
"nextValidatorHashes": [
"0x0ec3102f334aba804c18b843e45ec874005587122a1b49273b1b04d6fd98b1a2",
"0xb277ac8a7aafc125d7da813a9b0fdae144922c165bfae194ebd94d6f3e4fe68e",
"0xcc6aefdce3f83d204893cb57388a72b4553b613f95b437ce548582470e62d1e7",
"0xcefa9940d25d21ac6d0a579727e8812283ed00d7ace9dfc9e30a0f95a0ea7bdd",
"0x8e720aed537cb30d204f1de9fb5aab6e0129acfc3f41a3c69259231c1f0f2685",
"0x5f883131cf6667cb8c2279caa182298e174bbca35c7c8c5679df6bad73be85cf",
"0x744ae85e99103a5ebcf9dd2fdcc18743012f0336f497fd3a05243a26a1a031b7"
]
}
}

View file

@ -8,7 +8,9 @@ contract Config {
uint256 randaoCommitExpiration;
uint256 minNumRequiredSignatures;
uint64 startBlock;
uint128 initialValidatorSetId;
bytes32[] initialValidatorHashes;
uint128 nextValidatorSetId;
bytes32[] nextValidatorHashes;
bytes32 rewardsMessageOrigin;
}

View file

@ -208,10 +208,12 @@ abstract contract DeployBase is Script, DeployParams, Accounts {
SnowbridgeConfig memory config
) internal returns (BeefyClient) {
// Create validator sets using the MerkleUtils library
BeefyClient.ValidatorSet memory validatorSet =
ValidatorsUtils._buildValidatorSet(0, config.initialValidatorHashes);
BeefyClient.ValidatorSet memory nextValidatorSet =
ValidatorsUtils._buildValidatorSet(1, config.nextValidatorHashes);
BeefyClient.ValidatorSet memory validatorSet = ValidatorsUtils._buildValidatorSet(
config.initialValidatorSetId, config.initialValidatorHashes
);
BeefyClient.ValidatorSet memory nextValidatorSet = ValidatorsUtils._buildValidatorSet(
config.nextValidatorSetId, config.nextValidatorHashes
);
// Deploy BeefyClient
vm.broadcast(_deployerPrivateKey);

View file

@ -29,10 +29,11 @@ import {
} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
/**
* @title DeployTestnet
* @notice Deployment script for testnets (hoodi) - references existing EigenLayer contracts
* @title DeployLive
* @notice Deployment script for live networks (hoodi testnet, ethereum mainnet)
* @dev References existing EigenLayer contracts on the target chain
*/
contract DeployTestnet is DeployBase {
contract DeployLive is DeployBase {
string public networkName;
function run() public {
@ -40,7 +41,7 @@ contract DeployTestnet is DeployBase {
networkName = vm.envString("NETWORK");
require(
bytes(networkName).length > 0,
"NETWORK environment variable required for testnet deployment"
"NETWORK environment variable required for live deployment"
);
_validateNetwork(networkName);
@ -49,7 +50,7 @@ contract DeployTestnet is DeployBase {
address avsOwnerEnv = vm.envOr("AVS_OWNER_ADDRESS", address(0));
require(
avsOwnerEnv != address(0),
"AVS_OWNER_ADDRESS env variable required for testnet deployments"
"AVS_OWNER_ADDRESS env variable required for live deployments"
);
_executeSharedDeployment();
@ -60,8 +61,8 @@ contract DeployTestnet is DeployBase {
return networkName;
}
function _getDeploymentMode() internal pure override returns (string memory) {
return "HOODI_TESTNET";
function _getDeploymentMode() internal view override returns (string memory) {
return string.concat("LIVE_", networkName);
}
function _setupEigenLayerContracts(
@ -100,16 +101,16 @@ contract DeployTestnet is DeployBase {
Logging.logStep("All EigenLayer contracts referenced successfully");
Logging.logFooter();
// Testnet deployments create their own ProxyAdmin (no existing one from EigenLayer deployment)
// Live deployments create their own ProxyAdmin (no existing one from EigenLayer deployment)
return ProxyAdmin(address(0)); // Will be created in _createServiceManagerProxy
}
function _createServiceManagerProxy(
DataHavenServiceManager implementation,
ProxyAdmin, // Ignored for testnet deployment
ProxyAdmin, // Ignored for live deployment
ServiceManagerInitParams memory params
) internal override returns (DataHavenServiceManager) {
// Testnet deployment creates its own ProxyAdmin for the service manager
// Live deployment creates its own ProxyAdmin for the service manager
vm.broadcast(_deployerPrivateKey);
ProxyAdmin proxyAdmin = new ProxyAdmin();
Logging.logContractDeployed("ProxyAdmin", address(proxyAdmin));
@ -186,7 +187,7 @@ contract DeployTestnet is DeployBase {
);
json = string.concat(json, '"RewardsAgent": "', vm.toString(rewardsAgent), '",');
// EigenLayer contracts (existing on testnet)
// EigenLayer contracts (existing on live network)
json = string.concat(json, '"DelegationManager": "', vm.toString(address(delegation)), '",');
json = string.concat(
json, '"StrategyManager": "', vm.toString(address(strategyManager)), '",'
@ -209,23 +210,34 @@ contract DeployTestnet is DeployBase {
Logging.logInfo(string.concat("Deployment info saved to: ", deploymentPath));
}
// TESTNET-SPECIFIC FUNCTIONS
// LIVE DEPLOYMENT FUNCTIONS
/**
* @notice Validate that the network is hoodi (the only supported testnet)
* @notice Validate that the network is in the supported allowlist
* @dev Supported networks:
* - "hoodi", "stagenet-hoodi", "testnet-hoodi" (Hoodi testnet)
* - "ethereum", "mainnet-ethereum" (Ethereum mainnet)
*/
function _validateNetwork(
string memory network
) internal pure {
bytes32 networkHash = keccak256(abi.encodePacked(network));
bytes32 h = keccak256(bytes(network));
if (networkHash != keccak256(abi.encodePacked("hoodi"))) {
revert(
string.concat(
"Unsupported testnet network: ", network, ". Supported networks: hoodi"
)
);
if (
h == keccak256("hoodi") || h == keccak256("stagenet-hoodi")
|| h == keccak256("testnet-hoodi") || h == keccak256("mainnet-ethereum")
|| h == keccak256("ethereum")
) {
return;
}
revert(
string.concat(
"Unsupported network: ",
network,
". Supported: hoodi, stagenet-hoodi, testnet-hoodi, ethereum, mainnet-ethereum"
)
);
}
/**

View file

@ -31,9 +31,27 @@ contract DeployParams is Script, Config {
bool isDevMode = keccak256(abi.encodePacked(vm.envOr("DEV_MODE", string("false"))))
== keccak256(abi.encodePacked("true"));
if (isDevMode) {
config.initialValidatorSetId = 0;
config.initialValidatorHashes = TestUtils.generateMockValidators(10);
config.nextValidatorSetId = 1;
config.nextValidatorHashes = TestUtils.generateMockValidators(10);
} else {
// Load validator set IDs (default to 0/1 for backwards compatibility)
try vm.parseJsonUint(configJson, ".snowbridge.initialValidatorSetId") returns (
uint256 val
) {
config.initialValidatorSetId = uint128(val);
} catch {
config.initialValidatorSetId = 0;
}
try vm.parseJsonUint(configJson, ".snowbridge.nextValidatorSetId") returns (
uint256 val
) {
config.nextValidatorSetId = uint128(val);
} catch {
config.nextValidatorSetId = config.initialValidatorSetId + 1;
}
config.initialValidatorHashes =
_loadValidatorsFromConfig(configJson, ".snowbridge.initialValidatorHashes");
config.nextValidatorHashes =

219
operator/Cargo.lock generated
View file

@ -1176,7 +1176,7 @@ dependencies = [
"bitflags 2.9.4",
"cexpr",
"clang-sys",
"itertools 0.11.0",
"itertools 0.13.0",
"proc-macro2",
"quote",
"regex",
@ -1521,7 +1521,7 @@ dependencies = [
"pallet-message-queue",
"parity-scale-codec",
"scale-info",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"sp-core",
"sp-runtime",
"sp-std",
@ -2607,7 +2607,7 @@ dependencies = [
[[package]]
name = "datahaven-mainnet-runtime"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"alloy-core",
"bridge-hub-common 0.13.1",
@ -2629,6 +2629,7 @@ dependencies = [
"hex",
"hex-literal 0.3.4",
"itoa",
"k256",
"log",
"num-bigint",
"num_enum",
@ -2718,8 +2719,8 @@ dependencies = [
"shp-treasury-funding",
"shp-tx-implicits-runtime-api",
"smallvec",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-core 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"snowbridge-core 0.22.0",
"snowbridge-inbound-queue-primitives",
"snowbridge-merkle-tree",
"snowbridge-outbound-queue-primitives",
@ -2762,7 +2763,7 @@ dependencies = [
[[package]]
name = "datahaven-node"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"async-channel 1.9.0",
"clap",
@ -2790,6 +2791,7 @@ dependencies = [
"hex-literal 0.3.4",
"jsonrpsee 0.24.9",
"log",
"mmr-gadget",
"mmr-rpc",
"openssl-sys",
"pallet-beefy-mmr",
@ -2859,6 +2861,7 @@ dependencies = [
"sp-io",
"sp-keyring",
"sp-keystore",
"sp-mmr-primitives",
"sp-offchain",
"sp-runtime",
"sp-session",
@ -2873,7 +2876,7 @@ dependencies = [
[[package]]
name = "datahaven-runtime-common"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"alloy-core",
"fp-account",
@ -2907,7 +2910,7 @@ dependencies = [
[[package]]
name = "datahaven-stagenet-runtime"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"alloy-core",
"bridge-hub-common 0.13.1",
@ -2929,6 +2932,7 @@ dependencies = [
"hex",
"hex-literal 0.3.4",
"itoa",
"k256",
"log",
"num-bigint",
"num_enum",
@ -3018,8 +3022,8 @@ dependencies = [
"shp-treasury-funding",
"shp-tx-implicits-runtime-api",
"smallvec",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-core 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"snowbridge-core 0.22.0",
"snowbridge-inbound-queue-primitives",
"snowbridge-merkle-tree",
"snowbridge-outbound-queue-primitives",
@ -3062,7 +3066,7 @@ dependencies = [
[[package]]
name = "datahaven-testnet-runtime"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"alloy-core",
"bridge-hub-common 0.13.1",
@ -3084,6 +3088,7 @@ dependencies = [
"hex",
"hex-literal 0.3.4",
"itoa",
"k256",
"log",
"num-bigint",
"num_enum",
@ -3173,8 +3178,8 @@ dependencies = [
"shp-treasury-funding",
"shp-tx-implicits-runtime-api",
"smallvec",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-core 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"snowbridge-core 0.22.0",
"snowbridge-inbound-queue-primitives",
"snowbridge-merkle-tree",
"snowbridge-outbound-queue-primitives",
@ -3366,7 +3371,7 @@ dependencies = [
[[package]]
name = "dhp-bridge"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-support",
"frame-system",
@ -3374,7 +3379,7 @@ dependencies = [
"pallet-datahaven-native-transfer",
"pallet-external-validators",
"parity-scale-codec",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"snowbridge-inbound-queue-primitives",
"sp-core",
"sp-std",
@ -3864,7 +3869,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
"windows-sys 0.52.0",
"windows-sys 0.61.2",
]
[[package]]
@ -5766,7 +5771,7 @@ dependencies = [
"js-sys",
"log",
"wasm-bindgen",
"windows-core 0.62.2",
"windows-core 0.61.2",
]
[[package]]
@ -6215,15 +6220,6 @@ dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "1.0.15"
@ -7722,6 +7718,25 @@ dependencies = [
"zeroize",
]
[[package]]
name = "mmr-gadget"
version = "43.0.0"
source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753"
dependencies = [
"futures",
"log",
"parity-scale-codec",
"sc-client-api",
"sc-offchain",
"sp-api",
"sp-blockchain",
"sp-consensus",
"sp-consensus-beefy",
"sp-core",
"sp-mmr-primitives",
"sp-runtime",
]
[[package]]
name = "mmr-rpc"
version = "39.0.0"
@ -8259,7 +8274,7 @@ version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
dependencies = [
"proc-macro-crate 1.1.3",
"proc-macro-crate 3.4.0",
"proc-macro2",
"quote",
"syn 2.0.106",
@ -8701,7 +8716,7 @@ dependencies = [
[[package]]
name = "pallet-datahaven-native-transfer"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-benchmarking",
"frame-support",
@ -8709,7 +8724,7 @@ dependencies = [
"pallet-balances",
"parity-scale-codec",
"scale-info",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"snowbridge-outbound-queue-primitives",
"sp-core",
"sp-io",
@ -8813,7 +8828,7 @@ dependencies = [
[[package]]
name = "pallet-evm-precompile-balances-erc20"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"fp-evm",
"frame-support",
@ -8836,7 +8851,7 @@ dependencies = [
[[package]]
name = "pallet-evm-precompile-batch"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"evm",
"fp-evm",
@ -8875,7 +8890,7 @@ dependencies = [
[[package]]
name = "pallet-evm-precompile-call-permit"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"evm",
"fp-evm",
@ -8941,7 +8956,7 @@ dependencies = [
[[package]]
name = "pallet-evm-precompile-datahaven-native-transfer"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"evm",
"fp-evm",
@ -8955,7 +8970,7 @@ dependencies = [
"parity-scale-codec",
"precompile-utils",
"scale-info",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"snowbridge-outbound-queue-primitives",
"sp-core",
"sp-io",
@ -9034,7 +9049,7 @@ dependencies = [
[[package]]
name = "pallet-evm-precompile-proxy"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"evm",
"fp-evm",
@ -9078,7 +9093,7 @@ dependencies = [
[[package]]
name = "pallet-evm-precompile-registry"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"fp-evm",
"frame-support",
@ -9129,7 +9144,7 @@ dependencies = [
"parity-scale-codec",
"scale-info",
"serde",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"snowbridge-outbound-queue-primitives",
"sp-core",
"sp-io",
@ -9139,7 +9154,7 @@ dependencies = [
[[package]]
name = "pallet-external-validators"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-benchmarking",
"frame-support",
@ -9163,7 +9178,7 @@ dependencies = [
[[package]]
name = "pallet-external-validators-rewards"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-benchmarking",
"frame-support",
@ -9176,7 +9191,7 @@ dependencies = [
"pallet-timestamp",
"parity-scale-codec",
"scale-info",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"snowbridge-outbound-queue-primitives",
"sp-core",
"sp-io",
@ -9211,6 +9226,7 @@ dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"hex",
"log",
"num-bigint",
"pallet-file-system-runtime-api",
@ -9221,6 +9237,7 @@ dependencies = [
"parity-scale-codec",
"scale-info",
"shp-constants",
"shp-file-key-verifier",
"shp-file-metadata",
"shp-traits",
"sp-core",
@ -9400,7 +9417,7 @@ dependencies = [
[[package]]
name = "pallet-outbound-commitment-store"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-support",
"frame-system",
@ -9482,11 +9499,15 @@ dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"hex",
"pallet-balances",
"pallet-proofs-dealer-runtime-api",
"pallet-storage-providers",
"parity-scale-codec",
"scale-info",
"shp-file-key-verifier",
"shp-file-metadata",
"shp-forest-verifier",
"shp-traits",
"sp-core",
"sp-keyring",
@ -9520,7 +9541,7 @@ dependencies = [
[[package]]
name = "pallet-proxy-genesis-companion"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-support",
"frame-system",
@ -9631,18 +9652,15 @@ dependencies = [
[[package]]
name = "pallet-session-benchmarking"
version = "39.1.0"
source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753"
version = "0.22.0"
dependencies = [
"frame-benchmarking",
"frame-support",
"frame-system",
"pallet-session",
"pallet-staking",
"parity-scale-codec",
"rand 0.8.5",
"sp-runtime",
"sp-session",
"sp-std",
]
[[package]]
@ -11104,7 +11122,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4"
dependencies = [
"bytes",
"heck 0.4.1",
"heck 0.5.0",
"itertools 0.12.1",
"log",
"multimap",
@ -11124,8 +11142,8 @@ version = "0.13.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf"
dependencies = [
"heck 0.4.1",
"itertools 0.14.0",
"heck 0.5.0",
"itertools 0.13.0",
"log",
"multimap",
"once_cell",
@ -11158,7 +11176,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d"
dependencies = [
"anyhow",
"itertools 0.14.0",
"itertools 0.13.0",
"proc-macro2",
"quote",
"syn 2.0.106",
@ -11918,7 +11936,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys 0.11.0",
"windows-sys 0.52.0",
"windows-sys 0.61.2",
]
[[package]]
@ -14782,7 +14800,7 @@ dependencies = [
[[package]]
name = "snowbridge-beacon-primitives"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"byte-slice-cast",
"frame-support",
@ -14827,7 +14845,7 @@ dependencies = [
[[package]]
name = "snowbridge-core"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"bp-relayers",
"ethabi-decode",
@ -14904,8 +14922,8 @@ dependencies = [
"log",
"parity-scale-codec",
"scale-info",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-core 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"snowbridge-core 0.22.0",
"snowbridge-verification-primitives",
"sp-core",
"sp-io",
@ -14918,7 +14936,7 @@ dependencies = [
[[package]]
name = "snowbridge-merkle-tree"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"array-bytes",
"hex",
@ -14959,7 +14977,7 @@ dependencies = [
[[package]]
name = "snowbridge-outbound-queue-primitives"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"alloy-core",
"ethabi-decode",
@ -14971,7 +14989,7 @@ dependencies = [
"parity-scale-codec",
"polkadot-parachain-primitives",
"scale-info",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"snowbridge-verification-primitives",
"sp-arithmetic",
"sp-core",
@ -14985,12 +15003,12 @@ dependencies = [
[[package]]
name = "snowbridge-outbound-queue-v2-runtime-api"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-support",
"parity-scale-codec",
"scale-info",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"snowbridge-merkle-tree",
"snowbridge-outbound-queue-primitives",
"sp-api",
@ -15000,7 +15018,7 @@ dependencies = [
[[package]]
name = "snowbridge-pallet-ethereum-client"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-benchmarking",
"frame-support",
@ -15013,8 +15031,8 @@ dependencies = [
"scale-info",
"serde",
"serde_json",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-core 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"snowbridge-core 0.22.0",
"snowbridge-ethereum 0.3.0",
"snowbridge-inbound-queue-primitives",
"snowbridge-pallet-ethereum-client-fixtures",
@ -15030,8 +15048,8 @@ name = "snowbridge-pallet-ethereum-client-fixtures"
version = "0.9.0"
dependencies = [
"hex-literal 0.3.4",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-core 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"snowbridge-core 0.22.0",
"snowbridge-inbound-queue-primitives",
"sp-core",
"sp-std",
@ -15039,7 +15057,7 @@ dependencies = [
[[package]]
name = "snowbridge-pallet-inbound-queue-v2"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"alloy-core",
"bp-relayers",
@ -15053,8 +15071,8 @@ dependencies = [
"parity-scale-codec",
"scale-info",
"serde",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-core 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"snowbridge-core 0.22.0",
"snowbridge-inbound-queue-primitives",
"snowbridge-pallet-ethereum-client",
"snowbridge-pallet-inbound-queue-v2-fixtures",
@ -15075,8 +15093,8 @@ name = "snowbridge-pallet-inbound-queue-v2-fixtures"
version = "0.10.0"
dependencies = [
"hex-literal 0.3.4",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-core 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"snowbridge-core 0.22.0",
"snowbridge-inbound-queue-primitives",
"sp-core",
"sp-std",
@ -15106,7 +15124,7 @@ dependencies = [
[[package]]
name = "snowbridge-pallet-outbound-queue-v2"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"alloy-core",
"bp-relayers",
@ -15120,8 +15138,8 @@ dependencies = [
"parity-scale-codec",
"scale-info",
"serde",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-core 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"snowbridge-core 0.22.0",
"snowbridge-inbound-queue-primitives",
"snowbridge-merkle-tree",
"snowbridge-outbound-queue-primitives",
@ -15152,7 +15170,7 @@ dependencies = [
"parity-scale-codec",
"polkadot-primitives",
"scale-info",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"snowbridge-outbound-queue-primitives",
"snowbridge-pallet-outbound-queue",
"sp-core",
@ -15165,7 +15183,7 @@ dependencies = [
[[package]]
name = "snowbridge-pallet-system-v2"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-benchmarking",
"frame-support",
@ -15177,7 +15195,7 @@ dependencies = [
"parity-scale-codec",
"polkadot-primitives",
"scale-info",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"snowbridge-outbound-queue-primitives",
"snowbridge-pallet-outbound-queue-v2",
"snowbridge-pallet-system",
@ -15193,10 +15211,10 @@ dependencies = [
[[package]]
name = "snowbridge-system-v2-runtime-api"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"parity-scale-codec",
"snowbridge-core 0.21.0",
"snowbridge-core 0.22.0",
"sp-api",
"sp-std",
"staging-xcm",
@ -15204,7 +15222,7 @@ dependencies = [
[[package]]
name = "snowbridge-test-utils"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-benchmarking",
"frame-support",
@ -15224,12 +15242,12 @@ dependencies = [
[[package]]
name = "snowbridge-verification-primitives"
version = "0.21.0"
version = "0.22.0"
dependencies = [
"frame-support",
"parity-scale-codec",
"scale-info",
"snowbridge-beacon-primitives 0.21.0",
"snowbridge-beacon-primitives 0.22.0",
"sp-core",
"sp-std",
]
@ -16810,7 +16828,7 @@ dependencies = [
"getrandom 0.3.3",
"once_cell",
"rustix 1.1.2",
"windows-sys 0.52.0",
"windows-sys 0.61.2",
]
[[package]]
@ -18416,7 +18434,7 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
"windows-sys 0.48.0",
"windows-sys 0.61.2",
]
[[package]]
@ -18477,20 +18495,7 @@ dependencies = [
"windows-interface",
"windows-link 0.1.3",
"windows-result 0.3.4",
"windows-strings 0.4.2",
]
[[package]]
name = "windows-core"
version = "0.62.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
dependencies = [
"windows-implement",
"windows-interface",
"windows-link 0.2.1",
"windows-result 0.4.1",
"windows-strings 0.5.1",
"windows-strings",
]
[[package]]
@ -18566,15 +18571,6 @@ dependencies = [
"windows-link 0.1.3",
]
[[package]]
name = "windows-result"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
dependencies = [
"windows-link 0.2.1",
]
[[package]]
name = "windows-strings"
version = "0.4.2"
@ -18584,15 +18580,6 @@ dependencies = [
"windows-link 0.1.3",
]
[[package]]
name = "windows-strings"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
dependencies = [
"windows-link 0.2.1",
]
[[package]]
name = "windows-sys"
version = "0.45.0"

View file

@ -5,7 +5,7 @@ edition = "2021"
homepage = "https://datahaven.xyz/"
license = "GPL-3"
repository = "https://github.com/datahavenxyz/datahaven"
version = "0.21.0"
version = "0.22.0"
[workspace]
members = [
@ -28,6 +28,7 @@ datahaven-stagenet-runtime = { path = "./runtime/stagenet", default-features = f
datahaven-testnet-runtime = { path = "./runtime/testnet", default-features = false }
dhp-bridge = { path = "./primitives/bridge", default-features = false }
pallet-datahaven-native-transfer = { path = "./pallets/datahaven-native-transfer", default-features = false }
pallet-session-benchmarking = { path = "./pallets/session-benchmarking", default-features = false }
pallet-evm-precompile-balances-erc20 = { path = "./precompiles/erc20-balances", default-features = false }
pallet-evm-precompile-batch = { path = "./precompiles/batch", default-features = false }
pallet-evm-precompile-call-permit = { path = "./precompiles/call-permit", default-features = false }
@ -67,6 +68,10 @@ impl-serde = { version = "0.5.0", default-features = false }
impl-trait-for-tuples = { version = "0.2.2" }
itoa = { version = "1.0" }
jsonrpsee = { version = "0.24.3" }
k256 = { version = "0.13.4", default-features = false, features = [
"ecdsa",
"alloc",
] }
libsecp256k1 = { version = "0.7", default-features = false }
log = { version = "0.4.25" }
macro_rules_attribute = { version = "0.2.0" }
@ -113,6 +118,7 @@ frame-system = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polk
frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
mmr-gadget = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
mmr-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
pallet-assets = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
@ -139,7 +145,6 @@ pallet-referenda = { git = "https://github.com/paritytech/polkadot-sdk", tag = "
pallet-safe-mode = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
pallet-session-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
pallet-staking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
@ -191,6 +196,7 @@ sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polk
sp-io = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
sp-mmr-primitives = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }
sp-runtime-interface = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false }

View file

@ -19,7 +19,6 @@
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
use crate::{{pallet}};
/// Weights for `{{pallet}}`.
pub struct WeightInfo<T>(PhantomData<T>);

View file

@ -35,9 +35,11 @@ serde_json = { workspace = true, default-features = true }
url = { workspace = true }
#MMR
mmr-gadget = { workspace = true, default-features = true }
mmr-rpc = { workspace = true, default-features = true }
pallet-beefy-mmr = { workspace = true, default-features = true }
pallet-mmr = { workspace = true, default-features = true }
sp-mmr-primitives = { workspace = true, default-features = true }
# Polkadot SDK
frame-benchmarking-cli = { workspace = true, default-features = true, optional = true }

View file

@ -72,6 +72,7 @@ use sp_api::ProvideRuntimeApi;
use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata};
use sp_consensus_beefy::ecdsa_crypto::AuthorityId as BeefyId;
use sp_keystore::KeystorePtr;
use sp_mmr_primitives::INDEXING_PREFIX;
use sp_runtime::traits::BlakeTwo256;
use sp_runtime::SaturatedConversion;
use std::path::PathBuf;
@ -452,6 +453,9 @@ where
StorageHubBuilder<R, S, Runtime>: StorageLayerBuilder + Buildable<(R, S), Runtime>,
StorageHubHandler<(R, S), Runtime>: RunnableTasks,
{
let enable_offchain_worker = config.offchain_worker.enabled;
let is_offchain_indexing_enabled = config.offchain_worker.indexing_enabled;
let role = config.role;
let mut sealing = match sealing {
Some(_) if !matches!(config.chain_spec.chain_type(), ChainType::Development) => {
@ -582,7 +586,7 @@ where
metrics,
})?;
if config.offchain_worker.enabled {
if enable_offchain_worker {
task_manager.spawn_handle().spawn(
"offchain-workers-runner",
"offchain-worker",
@ -948,6 +952,22 @@ where
.spawn_essential_handle()
.spawn_blocking("beefy-gadget", None, gadget);
}
// Spawn MMR gadget for offchain MMR leaf indexing.
// This gadget monitors finality and canonicalizes MMR data in offchain storage,
// enabling efficient MMR proof queries by block number via the MMR RPC.
// Only run when offchain indexing is enabled, as the gadget writes to offchain storage.
if is_offchain_indexing_enabled {
task_manager.spawn_essential_handle().spawn_blocking(
"mmr-gadget",
None,
mmr_gadget::MmrGadget::start(
client.clone(),
backend.clone(),
INDEXING_PREFIX.to_vec(),
),
);
}
}
if let Some(_) = role_options {

View file

@ -0,0 +1,40 @@
[package]
authors = { workspace = true }
description = "Benchmarking helpers for pallet-session in DataHaven runtimes."
edition = { workspace = true }
license = { workspace = true }
name = "pallet-session-benchmarking"
version = { workspace = true }
[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
[lints]
workspace = true
[dependencies]
codec = { workspace = true }
frame-benchmarking = { workspace = true, optional = true }
frame-support = { workspace = true }
frame-system = { workspace = true }
pallet-session = { workspace = true }
sp-runtime = { workspace = true }
sp-std = { workspace = true }
[features]
default = ["std"]
std = [
"codec/std",
"frame-benchmarking?/std",
"frame-support/std",
"frame-system/std",
"pallet-session/std",
"sp-runtime/std",
"sp-std/std",
]
runtime-benchmarks = [
"frame-benchmarking/runtime-benchmarks",
"frame-support/runtime-benchmarks",
"frame-system/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
]

View file

@ -0,0 +1,32 @@
//! Benchmarks for solochain session usage (no staking dependency).
//!
//! This mirrors the upstream session benchmarks but avoids `pallet_staking`
//! by directly calling `pallet_session::Pallet::set_keys`. The session keys
//! are decoded from zeros, which works as long as the runtime wires Babe and
//! Grandpa into `SessionKeys`.
use alloc::{vec, vec::Vec};
use codec::Decode;
use frame_benchmarking::{benchmarks, whitelisted_caller};
use frame_system::RawOrigin;
use crate::{Config, Pallet};
use pallet_session::Call;
benchmarks! {
set_keys {
let caller: T::AccountId = whitelisted_caller();
frame_system::Pallet::<T>::inc_providers(&caller);
let keys = T::Keys::decode(&mut sp_runtime::traits::TrailingZeroInput::zeroes()).unwrap();
let proof: Vec<u8> = vec![0, 1, 2, 3];
}: _(RawOrigin::Signed(caller), keys, proof)
purge_keys {
let caller: T::AccountId = whitelisted_caller();
frame_system::Pallet::<T>::inc_providers(&caller);
let keys = T::Keys::decode(&mut sp_runtime::traits::TrailingZeroInput::zeroes()).unwrap();
let proof: Vec<u8> = vec![0, 1, 2, 3];
let _ = pallet_session::Pallet::<T>::set_keys(RawOrigin::Signed(caller.clone()).into(), keys, proof);
}: _(RawOrigin::Signed(caller))
}

View file

@ -0,0 +1,11 @@
#![cfg_attr(not(feature = "std"), no_std)]
extern crate alloc;
pub struct Pallet<T: Config>(pallet_session::Pallet<T>);
/// Benchmarking configuration for pallet-session in DataHaven.
pub trait Config: pallet_session::Config {}
#[cfg(feature = "runtime-benchmarks")]
mod benchmarking;

View file

@ -15,7 +15,9 @@
// along with Moonbeam. If not, see <http://www.gnu.org/licenses/>.
use fp_account::AccountId20;
use frame_support::traits::Currency;
use pallet_treasury::ArgumentsFactory;
use sp_runtime::traits::Zero;
pub struct BenchmarkHelper;
impl ArgumentsFactory<(), AccountId20> for BenchmarkHelper {
@ -31,3 +33,24 @@ impl ArgumentsFactory<(), AccountId20> for BenchmarkHelper {
AccountId20::from(seed)
}
}
pub struct StorageHubBenchmarking;
impl StorageHubBenchmarking {
pub const SP_MIN_DEPOSIT: u128 = 100_000_000_000_000;
pub const BUCKET_DEPOSIT: u128 = 100_000_000_000_000;
// Keep the benchmark challenge period within u32 limits.
pub const STAKE_TO_CHALLENGE_PERIOD: u128 = 3_000_000_000_000_000;
// Derived from StakeToChallengePeriod / SP_MIN_DEPOSIT + tolerance + 1.
pub const CHECKPOINT_CHALLENGE_PERIOD: u32 = 81;
pub fn ensure_treasury_account<AccountId, Balance, CurrencyT>(account: AccountId) -> AccountId
where
Balance: From<u128> + Zero,
CurrencyT: Currency<AccountId, Balance = Balance>,
{
if CurrencyT::free_balance(&account).is_zero() {
let _ = CurrencyT::deposit_creating(&account, 1u128.into());
}
account
}
}

View file

@ -86,6 +86,7 @@ polkadot-runtime-common = { workspace = true }
precompile-utils = { workspace = true }
scale-info = { workspace = true, features = ["derive", "serde"] }
serde = { workspace = true, features = ["derive"] }
k256 = { workspace = true, optional = true }
serde_json = { workspace = true, default-features = false, features = [
"alloc",
] }
@ -360,6 +361,13 @@ runtime-benchmarks = [
"snowbridge-pallet-system/runtime-benchmarks",
"pallet-outbound-commitment-store/runtime-benchmarks",
"pallet-datahaven-native-transfer/runtime-benchmarks",
# StorageHub pallets
"pallet-nfts/runtime-benchmarks",
"pallet-file-system/runtime-benchmarks",
"pallet-proofs-dealer/runtime-benchmarks",
"pallet-payment-streams/runtime-benchmarks",
"pallet-storage-providers/runtime-benchmarks",
"dep:k256",
]
try-runtime = [

View file

@ -27,6 +27,7 @@ frame_benchmarking::define_benchmarks!(
// Substrate pallets
[pallet_balances, Balances]
[pallet_session, pallet_session_benchmarking::Pallet::<Runtime>]
// FIXME: benchmarking identity fail
// [pallet_identity, Identity]
[pallet_im_online, ImOnline]
@ -47,6 +48,13 @@ frame_benchmarking::define_benchmarks!(
// EVM pallets
[pallet_evm, EVM]
// StorageHub pallets
[pallet_nfts, Nfts]
[pallet_file_system, FileSystem]
[pallet_proofs_dealer, ProofsDealer]
[pallet_payment_streams, PaymentStreams]
[pallet_storage_providers, Providers]
// Governance pallets
[pallet_collective_technical_committee, TechnicalCommittee]
[pallet_collective_treasury_council, TreasuryCouncil]

View file

@ -91,7 +91,6 @@ use datahaven_runtime_common::{
},
time::{EpochDurationInBlocks, SessionsPerEra, DAYS, MILLISECS_PER_BLOCK},
};
use dhp_bridge::{EigenLayerMessageProcessor, NativeTokenTransferMessageProcessor};
use frame_support::{
derive_impl,
dispatch::DispatchClass,
@ -126,7 +125,7 @@ use snowbridge_core::{gwei, meth, AgentIdOf, PricingParameters, Rewards, TokenId
use snowbridge_inbound_queue_primitives::RewardLedger;
use snowbridge_outbound_queue_primitives::{
v1::{Fee, Message, SendMessage},
v2::{Command, ConstantGasMeter},
v2::ConstantGasMeter,
SendError, SendMessageFeeProvider,
};
use snowbridge_pallet_outbound_queue_v2::OnNewCommitment;
@ -388,7 +387,7 @@ impl pallet_session::Config for Runtime {
>;
type SessionHandler = <SessionKeys as OpaqueKeys>::KeyTypeIdProviders;
type Keys = SessionKeys;
type WeightInfo = pallet_session::weights::SubstrateWeight<Runtime>;
type WeightInfo = mainnet_weights::pallet_session::WeightInfo<Runtime>;
}
parameter_types! {
@ -1108,47 +1107,13 @@ impl snowbridge_pallet_system_v2::Config for Runtime {
type Helper = ();
}
// Fork versions for runtime benchmarks - must match the fixtures for BLS verification to work
// The fixtures are generated with standard testnet fork versions
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const ChainForkVersions: ForkVersions = ForkVersions {
genesis: Fork {
version: hex_literal::hex!("00000000"),
epoch: 0,
},
altair: Fork {
version: hex_literal::hex!("01000000"),
epoch: 0,
},
bellatrix: Fork {
version: hex_literal::hex!("02000000"),
epoch: 0,
},
capella: Fork {
version: hex_literal::hex!("03000000"),
epoch: 0,
},
deneb: Fork {
version: hex_literal::hex!("04000000"),
epoch: 0,
},
electra: Fork {
version: hex_literal::hex!("05000000"),
epoch: 80000000000,
},
fulu: Fork {
version: hex_literal::hex!("06000000"),
epoch: 90000000000,
},
};
}
// For tests, fast-runtime and std configurations we use the mocked fork versions
// These match the fork versions used by the local Ethereum network in E2E tests
#[cfg(all(
any(feature = "std", feature = "fast-runtime", test),
not(feature = "runtime-benchmarks")
#[cfg(any(
feature = "std",
feature = "fast-runtime",
feature = "runtime-benchmarks",
test
))]
parameter_types! {
pub const ChainForkVersions: ForkVersions = ForkVersions {
@ -1278,8 +1243,8 @@ impl snowbridge_pallet_inbound_queue_v2::Config for Runtime {
type GatewayAddress = runtime_params::dynamic_params::runtime_config::EthereumGatewayAddress;
#[cfg(not(feature = "runtime-benchmarks"))]
type MessageProcessor = (
EigenLayerMessageProcessor<Runtime>,
NativeTokenTransferMessageProcessor<Runtime>,
dhp_bridge::EigenLayerMessageProcessor<Runtime>,
dhp_bridge::NativeTokenTransferMessageProcessor<Runtime>,
);
#[cfg(feature = "runtime-benchmarks")]
type MessageProcessor = NoOpMessageProcessor;
@ -1750,6 +1715,7 @@ mod tests {
use snowbridge_inbound_queue_primitives::v2::{
EthereumAsset, Message as SnowbridgeMessage, MessageProcessor, Payload as SnowPayload,
};
use snowbridge_outbound_queue_primitives::v2::Command;
use sp_core::H160;
use sp_io::TestExternalities;
use xcm_builder::GlobalConsensusConvertsFor;

View file

@ -14,9 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
#[cfg(not(feature = "runtime-benchmarks"))]
use super::HAVE;
#[cfg(feature = "runtime-benchmarks")]
use super::MICROHAVE;
use super::{
AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason,
TreasuryAccount, HAVE,
TreasuryAccount,
};
use crate::configs::runtime_params::dynamic_params::runtime_config;
use crate::{
@ -24,6 +28,8 @@ use crate::{
HOURS,
};
use core::marker::PhantomData;
#[cfg(feature = "runtime-benchmarks")]
use datahaven_runtime_common::benchmarking::StorageHubBenchmarking;
use datahaven_runtime_common::time::{DAYS, MINUTES};
use frame_support::pallet_prelude::DispatchClass;
use frame_support::traits::AsEnsureOriginWithArg;
@ -33,7 +39,7 @@ use frame_support::{
weights::Weight,
};
use frame_system::pallet_prelude::BlockNumberFor;
use frame_system::{EnsureRoot, EnsureSigned};
use frame_system::EnsureSigned;
use num_bigint::BigUint;
use pallet_nfts::PalletFeatures;
use polkadot_runtime_common::prod_or_fast;
@ -68,6 +74,7 @@ pub type StorageProofsMerkleTrieLayout = LayoutV1<BlakeTwo256>;
pub type Hashing = BlakeTwo256;
/****** NFTs pallet ******/
#[cfg(not(feature = "runtime-benchmarks"))]
parameter_types! {
pub const CollectionDeposit: Balance = 100 * HAVE;
pub const ItemDeposit: Balance = 1 * HAVE;
@ -80,6 +87,19 @@ parameter_types! {
pub const MaxAttributesPerCall: u32 = 10;
pub Features: PalletFeatures = PalletFeatures::all_enabled();
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const CollectionDeposit: Balance = 100 * MICROHAVE;
pub const ItemDeposit: Balance = 1 * MICROHAVE;
pub const MetadataDepositBase: Balance = 10 * MICROHAVE;
pub const MetadataDepositPerByte: Balance = 1 * MICROHAVE;
pub const ApprovalsLimit: u32 = 20;
pub const ItemAttributesApprovalsLimit: u32 = 20;
pub const MaxTips: u32 = 10;
pub const MaxDeadlineDuration: BlockNumber = 12 * 30 * DAYS;
pub const MaxAttributesPerCall: u32 = 10;
pub Features: PalletFeatures = PalletFeatures::all_enabled();
}
impl pallet_nfts::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
@ -104,11 +124,66 @@ impl pallet_nfts::Config for Runtime {
type Features = Features;
type OffchainSignature = Signature;
type OffchainPublic = <Signature as Verify>::Signer;
type WeightInfo = pallet_nfts::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_nfts::WeightInfo<Runtime>;
type Locker = ();
#[cfg(feature = "runtime-benchmarks")]
type Helper = benchmark_helpers::NftHelper;
}
/****** ****** ****** ******/
#[cfg(feature = "runtime-benchmarks")]
pub mod benchmark_helpers {
use crate::{AccountId, Signature};
use k256::ecdsa::SigningKey;
use sp_runtime::traits::{IdentifyAccount, Verify};
use sp_runtime::MultiSignature;
const BENCH_SIGNING_KEY: [u8; 32] = [1u8; 32];
fn bench_signing_key() -> SigningKey {
SigningKey::from_bytes(&BENCH_SIGNING_KEY.into())
.expect("benchmark signing key is valid; qed")
}
/// Benchmark helper for NFTs pallet
pub struct NftHelper;
impl pallet_nfts::BenchmarkHelper<u32, u32, <Signature as Verify>::Signer, AccountId, Signature>
for NftHelper
{
fn collection(i: u16) -> u32 {
i.into()
}
fn item(i: u16) -> u32 {
i.into()
}
fn signer() -> (<Signature as Verify>::Signer, AccountId) {
let signing_key = bench_signing_key();
let verifying_key = signing_key.verifying_key();
let encoded = verifying_key.to_encoded_point(true);
let public =
sp_core::ecdsa::Public::from_full(encoded.as_bytes()).expect("valid key; qed");
let public_key: <Signature as Verify>::Signer = public.into();
let account: AccountId = public_key.clone().into_account();
(public_key, account)
}
fn sign(_public: &<Signature as Verify>::Signer, message: &[u8]) -> Signature {
let digest = sp_io::hashing::keccak_256(message);
let (sig, recovery_id) = bench_signing_key()
.sign_prehash_recoverable(&digest)
.expect("signing with fixed key never fails; qed");
let mut sig_bytes = [0u8; 65];
sig_bytes[..64].copy_from_slice(&sig.to_bytes());
sig_bytes[64] = recovery_id.to_byte();
let sig = sp_core::ecdsa::Signature::from_raw(sig_bytes);
Signature::from(MultiSignature::Ecdsa(sig))
}
}
}
/****** Relay Randomness pallet ******/
impl pallet_randomness::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
@ -151,6 +226,7 @@ impl sp_runtime::traits::BlockNumberProvider for BlockNumberGetter {
/****** ****** ****** ******/
/****** Storage Providers pallet ******/
#[cfg(not(feature = "runtime-benchmarks"))]
parameter_types! {
pub const SpMinDeposit: Balance = 100 * HAVE;
pub const BucketDeposit: Balance = 100 * HAVE;
@ -159,10 +235,47 @@ parameter_types! {
// TODO: If the next line is uncommented (which should be eventually, replacing the line above), compilation breaks (most likely because of mismatched dependency issues)
// pub const MaxBlocksForRandomness: BlockNumber = prod_or_fast!(2 * runtime_constants::time::EPOCH_DURATION_IN_SLOTS, 2 * MINUTES);
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const SpMinDeposit: Balance = StorageHubBenchmarking::SP_MIN_DEPOSIT;
pub const BucketDeposit: Balance = StorageHubBenchmarking::BUCKET_DEPOSIT;
pub const BspSignUpLockPeriod: BlockNumber = 90 * DAYS; // ~3 months
pub const MaxBlocksForRandomness: BlockNumber = prod_or_fast!(2 * HOURS, 2 * MINUTES);
// TODO: If the next line is uncommented (which should be eventually, replacing the line above), compilation breaks (most likely because of mismatched dependency issues)
// pub const MaxBlocksForRandomness: BlockNumber = prod_or_fast!(2 * runtime_constants::time::EPOCH_DURATION_IN_SLOTS, 2 * MINUTES);
}
#[cfg(feature = "runtime-benchmarks")]
pub struct StorageHubTreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
impl Get<AccountId> for StorageHubTreasuryAccount {
fn get() -> AccountId {
let account = TreasuryAccount::get();
StorageHubBenchmarking::ensure_treasury_account::<AccountId, Balance, Balances>(account)
}
}
// Benchmark helpers for Storage Providers pallet.
#[cfg(feature = "runtime-benchmarks")]
pub struct ProvidersBenchmarkHelpers;
#[cfg(feature = "runtime-benchmarks")]
impl pallet_storage_providers::benchmarking::BenchmarkHelpers<Runtime>
for ProvidersBenchmarkHelpers
{
type ProviderId = <Runtime as pallet_storage_providers::Config>::ProviderId;
fn set_accrued_failed_proofs(provider_id: Self::ProviderId, value: u32) {
pallet_proofs_dealer::SlashableProviders::<Runtime>::insert(provider_id, value);
}
fn get_accrued_failed_proofs(provider_id: Self::ProviderId) -> u32 {
pallet_proofs_dealer::SlashableProviders::<Runtime>::get(provider_id).unwrap_or(0)
}
}
impl pallet_storage_providers::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_storage_providers::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_storage_providers::WeightInfo<Runtime>;
type ProvidersRandomness = pallet_randomness::RandomnessFromOneEpochAgo<Runtime>;
type PaymentStreams = PaymentStreams;
type ProofDealer = ProofsDealer;
@ -188,7 +301,10 @@ impl pallet_storage_providers::Config for Runtime {
type ProvidersProofSubmitters = ProofsDealer;
type ReputationWeightType = u32;
type StorageHubTickGetter = ProofsDealer;
#[cfg(not(feature = "runtime-benchmarks"))]
type Treasury = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type Treasury = StorageHubTreasuryAccount;
type SpMinDeposit = SpMinDeposit;
type SpMinCapacity = ConstU64<2>;
type DepositPerData = ConstU128<2>;
@ -208,6 +324,8 @@ impl pallet_storage_providers::Config for Runtime {
type ZeroSizeBucketFixedRate = runtime_config::ZeroSizeBucketFixedRate;
type ProviderTopUpTtl = runtime_config::ProviderTopUpTtl;
type MaxExpiredItemsInBlock = ConstU32<100>;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelpers = ProvidersBenchmarkHelpers;
}
pub struct StorageDataUnitAndBalanceConverter;
@ -240,7 +358,7 @@ parameter_types! {
impl pallet_payment_streams::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_payment_streams::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_payment_streams::WeightInfo<Runtime>;
type NativeBalance = Balances;
type ProvidersPallet = Providers;
type RuntimeHoldReason = RuntimeHoldReason;
@ -250,7 +368,10 @@ impl pallet_payment_streams::Config for Runtime {
type BlockNumberToBalance = BlockNumberToBalance;
type ProvidersProofSubmitters = ProofsDealer;
type TreasuryCutCalculator = LinearThenPowerOfTwoTreasuryCutCalculator<Runtime, Perbill>;
#[cfg(not(feature = "runtime-benchmarks"))]
type TreasuryAccount = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type TreasuryAccount = StorageHubTreasuryAccount;
type MaxUsersToCharge = ConstU32<10>;
type BaseDeposit = ConstU128<10>;
}
@ -279,6 +400,14 @@ const MAX_CUSTOM_CHALLENGES_PER_BLOCK: u32 = 10;
const TOTAL_MAX_CHALLENGES_PER_BLOCK: u32 =
RANDOM_CHALLENGES_PER_BLOCK + MAX_CUSTOM_CHALLENGES_PER_BLOCK;
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const BenchmarkStakeToChallengePeriod: Balance =
StorageHubBenchmarking::STAKE_TO_CHALLENGE_PERIOD;
pub const BenchmarkCheckpointChallengePeriod: BlockNumber =
StorageHubBenchmarking::CHECKPOINT_CHALLENGE_PERIOD;
}
parameter_types! {
pub const RandomChallengesPerBlock: u32 = RANDOM_CHALLENGES_PER_BLOCK;
pub const MaxCustomChallengesPerBlock: u32 = MAX_CUSTOM_CHALLENGES_PER_BLOCK;
@ -293,7 +422,7 @@ parameter_types! {
impl pallet_proofs_dealer::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_proofs_dealer::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_proofs_dealer::WeightInfo<Runtime>;
type ProvidersPallet = Providers;
type NativeBalance = Balances;
type MerkleTrieHash = Hash;
@ -306,29 +435,50 @@ impl pallet_proofs_dealer::Config for Runtime {
{ shp_constants::FILE_SIZE_TO_CHALLENGES },
>;
type StakeToBlockNumber = SaturatingBalanceToBlockNumber;
#[cfg(feature = "runtime-benchmarks")]
type RandomChallengesPerBlock = ConstU32<0>;
#[cfg(not(feature = "runtime-benchmarks"))]
type RandomChallengesPerBlock = RandomChallengesPerBlock;
#[cfg(feature = "runtime-benchmarks")]
type MaxCustomChallengesPerBlock = TotalMaxChallengesPerBlock;
#[cfg(not(feature = "runtime-benchmarks"))]
type MaxCustomChallengesPerBlock = MaxCustomChallengesPerBlock;
type MaxSubmittersPerTick = MaxSubmittersPerTick;
type TargetTicksStorageOfSubmitters = TargetTicksStorageOfSubmitters;
type ChallengeHistoryLength = ChallengeHistoryLength;
type ChallengesQueueLength = ChallengesQueueLength;
#[cfg(not(feature = "runtime-benchmarks"))]
type CheckpointChallengePeriod = runtime_config::CheckpointChallengePeriod;
#[cfg(feature = "runtime-benchmarks")]
type CheckpointChallengePeriod = BenchmarkCheckpointChallengePeriod;
type ChallengesFee = ChallengesFee;
type PriorityChallengesFee = PriorityChallengesFee;
#[cfg(not(feature = "runtime-benchmarks"))]
type Treasury = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type Treasury = StorageHubTreasuryAccount;
// TODO: Once the client logic to keep track of CR randomness deadlines and execute their submissions is implemented
// AND after the chain has been live for enough time to have enough providers to avoid the commit-reveal randomness being
// gameable, the randomness provider should be CrRandomness
type RandomnessProvider = pallet_randomness::ParentBlockRandomness<Runtime>;
#[cfg(not(feature = "runtime-benchmarks"))]
type StakeToChallengePeriod = runtime_config::StakeToChallengePeriod;
#[cfg(feature = "runtime-benchmarks")]
type StakeToChallengePeriod = BenchmarkStakeToChallengePeriod;
type MinChallengePeriod = runtime_config::MinChallengePeriod;
type ChallengeTicksTolerance = ChallengeTicksTolerance;
type BlockFullnessPeriod = ChallengeTicksTolerance; // We purposely set this to `ChallengeTicksTolerance` so that spamming of the chain is evaluated for the same blocks as the tolerance BSPs are given.
type BlockFullnessHeadroom = BlockFullnessHeadroom;
type MinNotFullBlocksRatio = MinNotFullBlocksRatio;
type MaxSlashableProvidersPerTick = MaxSlashableProvidersPerTick;
type ChallengeOrigin = EnsureRoot<AccountId>;
type PriorityChallengeOrigin = EnsureRoot<AccountId>;
#[cfg(not(feature = "runtime-benchmarks"))]
type ChallengeOrigin = frame_system::EnsureRoot<AccountId>;
#[cfg(feature = "runtime-benchmarks")]
type ChallengeOrigin = EnsureSigned<AccountId>;
#[cfg(not(feature = "runtime-benchmarks"))]
type PriorityChallengeOrigin = frame_system::EnsureRoot<AccountId>;
#[cfg(feature = "runtime-benchmarks")]
type PriorityChallengeOrigin = EnsureSigned<AccountId>;
}
// Converter from the Balance type to the BlockNumber type for math.
@ -452,12 +602,24 @@ impl Get<u32> for MaxSlashableProvidersPerTick {
type ThresholdType = u32;
pub type ReplicationTargetType = u32;
#[cfg(not(feature = "runtime-benchmarks"))]
parameter_types! {
pub const BaseStorageRequestCreationDeposit: Balance = 1 * HAVE;
pub const FileDeletionRequestCreationDeposit: Balance = 1 * HAVE;
pub const FileSystemStorageRequestCreationHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::StorageRequestCreationHold);
pub const FileSystemFileDeletionRequestHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::FileDeletionRequestHold);
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const BaseStorageRequestCreationDeposit: Balance = 1 * MICROHAVE;
pub const FileDeletionRequestCreationDeposit: Balance = 1 * MICROHAVE;
pub const FileSystemStorageRequestCreationHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::StorageRequestCreationHold);
pub const FileSystemFileDeletionRequestHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::FileDeletionRequestHold);
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const BenchmarkBspStopStoringFilePenalty: Balance = 1 * MICROHAVE;
}
// Converts a given signed message in a EIP-191 compliant message bytes to verify.
/// EIP-191: https://eips.ethereum.org/EIPS/eip-191
@ -480,7 +642,7 @@ impl shp_traits::MessageAdapter for Eip191Adapter {
impl pallet_file_system::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_file_system::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_file_system::WeightInfo<Runtime>;
type Providers = Providers;
type ProofDealer = ProofsDealer;
type PaymentStreams = PaymentStreams;
@ -500,8 +662,14 @@ impl pallet_file_system::Config for Runtime {
type RuntimeHoldReason = RuntimeHoldReason;
type Nfts = Nfts;
type CollectionInspector = BucketNfts;
#[cfg(not(feature = "runtime-benchmarks"))]
type BspStopStoringFilePenalty = runtime_config::BspStopStoringFilePenalty;
#[cfg(feature = "runtime-benchmarks")]
type BspStopStoringFilePenalty = BenchmarkBspStopStoringFilePenalty;
#[cfg(not(feature = "runtime-benchmarks"))]
type TreasuryAccount = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type TreasuryAccount = StorageHubTreasuryAccount;
type MaxBatchConfirmStorageRequests = ConstU32<100>;
type MaxFilePathSize = ConstU32<512u32>;
type MaxPeerIdSize = ConstU32<100>;

View file

@ -258,7 +258,7 @@ pub fn dorothy() -> AccountId {
}
pub fn ethan() -> AccountId {
AccountId::from(hex!("Ff64d3F6efE2317EE2807d2235B1ac2AA69d9E87"))
AccountId::from(hex!("Ff64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB"))
}
pub fn frank() -> AccountId {

View file

@ -142,7 +142,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
// `spec_version`, and `authoring_version` are the same between Wasm and native.
// This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use
// the compatible custom types.
spec_version: 1000,
spec_version: 1100,
impl_version: 1,
apis: RUNTIME_API_VERSIONS,
transaction_version: 1,
@ -201,7 +201,7 @@ parameter_types! {
parameter_types! {
// TODO: Change ED to 1 after upgrade to Polkadot SDK stable2503
// cfr. https://github.com/paritytech/polkadot-sdk/pull/7379
pub const ExistentialDeposit: Balance = 100;
pub const ExistentialDeposit: Balance = 1;
}
/// The version information used to identify this runtime when compiled natively.
@ -972,6 +972,7 @@ impl_runtime_apis! {
use frame_system_benchmarking::Pallet as SystemBench;
impl frame_system_benchmarking::Config for Runtime {}
impl pallet_session_benchmarking::Config for Runtime {}
impl baseline::Config for Runtime {}
use frame_support::traits::WhitelistedStorageKeys;

View file

@ -35,18 +35,24 @@ pub mod pallet_babe;
pub mod pallet_balances;
pub mod pallet_beefy_mmr;
pub mod pallet_evm;
pub mod pallet_file_system;
pub mod pallet_grandpa;
pub mod pallet_im_online;
pub mod pallet_message_queue;
pub mod pallet_migrations;
pub mod pallet_mmr;
pub mod pallet_multisig;
pub mod pallet_nfts;
pub mod pallet_parameters;
pub mod pallet_payment_streams;
pub mod pallet_preimage;
pub mod pallet_proofs_dealer;
pub mod pallet_proxy;
pub mod pallet_randomness;
pub mod pallet_safe_mode;
pub mod pallet_scheduler;
pub mod pallet_session;
pub mod pallet_storage_providers;
pub mod pallet_sudo;
pub mod pallet_timestamp;
pub mod pallet_transaction_payment;

View file

@ -0,0 +1,5 @@
//! Weights for `pallet_file_system`.
//!
//! Generated weights should overwrite this file.
pub use pallet_file_system::weights::SubstrateWeight as WeightInfo;

View file

@ -0,0 +1,726 @@
//! Autogenerated weights for `pallet_nfts`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2025-11-14, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-mainnet-runtime/datahaven_mainnet_runtime.compact.compressed.wasm
// --pallet
// pallet_nfts
// --extrinsic
//
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/mainnet/src/weights/pallet_nfts.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_nfts`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_nfts::WeightInfo for WeightInfo<T> {
/// Storage: `Nfts::NextCollectionId` (r:1 w:1)
/// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:0 w:1)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:1)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn create() -> Weight {
// Proof Size summary in bytes:
// Measured: `271`
// Estimated: `3537`
// Minimum execution time: 46_980_000 picoseconds.
Weight::from_parts(48_333_000, 3537)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::NextCollectionId` (r:1 w:1)
/// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:0 w:1)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:1)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn force_create() -> Weight {
// Proof Size summary in bytes:
// Measured: `76`
// Estimated: `3537`
// Minimum execution time: 25_388_000 picoseconds.
Weight::from_parts(26_185_000, 3537)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:0)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:1)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1001 w:1000)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1000 w:1000)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionMetadataOf` (r:0 w:1)
/// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:1)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// The range of component `m` is `[0, 1000]`.
/// The range of component `c` is `[0, 1000]`.
/// The range of component `a` is `[0, 1000]`.
fn destroy(m: u32, _c: u32, a: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `32179 + a * (366 ±0)`
// Estimated: `2523990 + a * (2930 ±0)`
// Minimum execution time: 1_376_605_000 picoseconds.
Weight::from_parts(1_488_155_322, 2523990)
// Standard Error: 20_663
.saturating_add(Weight::from_parts(65_636, 0).saturating_mul(m.into()))
// Standard Error: 20_663
.saturating_add(Weight::from_parts(8_224_542, 0).saturating_mul(a.into()))
.saturating_add(T::DbWeight::get().reads(1004_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into())))
.saturating_add(T::DbWeight::get().writes(1005_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(a.into()))
}
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
fn mint() -> Weight {
// Proof Size summary in bytes:
// Measured: `418`
// Estimated: `4062`
// Minimum execution time: 67_377_000 picoseconds.
Weight::from_parts(68_962_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
fn force_mint() -> Weight {
// Proof Size summary in bytes:
// Measured: `418`
// Estimated: `4062`
// Minimum execution time: 65_493_000 picoseconds.
Weight::from_parts(67_405_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Nfts::Attribute` (r:1 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:0)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:0 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn burn() -> Weight {
// Proof Size summary in bytes:
// Measured: `526`
// Estimated: `4062`
// Minimum execution time: 73_291_000 picoseconds.
Weight::from_parts(75_035_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:2)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `555`
// Estimated: `4062`
// Minimum execution time: 56_413_000 picoseconds.
Weight::from_parts(58_224_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:5000 w:5000)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// The range of component `i` is `[0, 5000]`.
fn redeposit(i: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `750 + i * (83 ±0)`
// Estimated: `3538 + i * (3072 ±0)`
// Minimum execution time: 18_658_000 picoseconds.
Weight::from_parts(19_263_000, 3538)
// Standard Error: 28_107
.saturating_add(Weight::from_parts(24_930_095, 0).saturating_mul(i.into()))
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into())))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
.saturating_add(Weight::from_parts(0, 3072).saturating_mul(i.into()))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn lock_item_transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `423`
// Estimated: `3522`
// Minimum execution time: 24_194_000 picoseconds.
Weight::from_parts(25_183_000, 3522)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn unlock_item_transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `423`
// Estimated: `3522`
// Minimum execution time: 24_302_000 picoseconds.
Weight::from_parts(24_760_000, 3522)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn lock_collection() -> Weight {
// Proof Size summary in bytes:
// Measured: `327`
// Estimated: `3538`
// Minimum execution time: 20_173_000 picoseconds.
Weight::from_parts(20_850_000, 3538)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1)
/// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:2)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn transfer_ownership() -> Weight {
// Proof Size summary in bytes:
// Measured: `524`
// Estimated: `3581`
// Minimum execution time: 35_232_000 picoseconds.
Weight::from_parts(36_300_000, 3581)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:2 w:4)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
fn set_team() -> Weight {
// Proof Size summary in bytes:
// Measured: `344`
// Estimated: `6054`
// Minimum execution time: 49_520_000 picoseconds.
Weight::from_parts(50_640_000, 6054)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:2)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn force_collection_owner() -> Weight {
// Proof Size summary in bytes:
// Measured: `298`
// Estimated: `3537`
// Minimum execution time: 20_820_000 picoseconds.
Weight::from_parts(21_202_000, 3537)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn force_collection_config() -> Weight {
// Proof Size summary in bytes:
// Measured: `276`
// Estimated: `3537`
// Minimum execution time: 16_693_000 picoseconds.
Weight::from_parts(17_330_000, 3537)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn lock_item_properties() -> Weight {
// Proof Size summary in bytes:
// Measured: `423`
// Estimated: `3522`
// Minimum execution time: 23_027_000 picoseconds.
Weight::from_parts(23_442_000, 3522)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:1)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
fn set_attribute() -> Weight {
// Proof Size summary in bytes:
// Measured: `514`
// Estimated: `3920`
// Minimum execution time: 68_689_000 picoseconds.
Weight::from_parts(70_511_000, 3920)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:1)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
fn force_set_attribute() -> Weight {
// Proof Size summary in bytes:
// Measured: `331`
// Estimated: `3920`
// Minimum execution time: 32_782_000 picoseconds.
Weight::from_parts(33_772_000, 3920)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Attribute` (r:1 w:1)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
fn clear_attribute() -> Weight {
// Proof Size summary in bytes:
// Measured: `958`
// Estimated: `3920`
// Minimum execution time: 62_968_000 picoseconds.
Weight::from_parts(64_747_000, 3920)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
fn approve_item_attributes() -> Weight {
// Proof Size summary in bytes:
// Measured: `356`
// Estimated: `4062`
// Minimum execution time: 20_730_000 picoseconds.
Weight::from_parts(21_384_000, 4062)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1001 w:1000)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 1000]`.
fn cancel_item_attributes_approval(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `769 + n * (386 ±0)`
// Estimated: `4062 + n * (2930 ±0)`
// Minimum execution time: 33_379_000 picoseconds.
Weight::from_parts(34_195_000, 4062)
// Standard Error: 4_787
.saturating_add(Weight::from_parts(7_772_947, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(2_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(n.into()))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:1)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
fn set_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `514`
// Estimated: `3800`
// Minimum execution time: 56_022_000 picoseconds.
Weight::from_parts(57_731_000, 3800)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:1)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn clear_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `824`
// Estimated: `3800`
// Minimum execution time: 53_756_000 picoseconds.
Weight::from_parts(54_834_000, 3800)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1)
/// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`)
fn set_collection_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `373`
// Estimated: `3759`
// Minimum execution time: 50_526_000 picoseconds.
Weight::from_parts(52_262_000, 3759)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1)
/// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`)
fn clear_collection_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `691`
// Estimated: `3759`
// Minimum execution time: 50_577_000 picoseconds.
Weight::from_parts(51_516_000, 3759)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn approve_transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `385`
// Estimated: `4062`
// Minimum execution time: 24_204_000 picoseconds.
Weight::from_parts(25_158_000, 4062)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
fn cancel_approval() -> Weight {
// Proof Size summary in bytes:
// Measured: `382`
// Estimated: `4062`
// Minimum execution time: 21_067_000 picoseconds.
Weight::from_parts(21_663_000, 4062)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
fn clear_all_transfer_approvals() -> Weight {
// Proof Size summary in bytes:
// Measured: `382`
// Estimated: `4062`
// Minimum execution time: 19_982_000 picoseconds.
Weight::from_parts(20_493_000, 4062)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1)
/// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn set_accept_ownership() -> Weight {
// Proof Size summary in bytes:
// Measured: `76`
// Estimated: `3505`
// Minimum execution time: 17_144_000 picoseconds.
Weight::from_parts(17_739_000, 3505)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
fn set_collection_max_supply() -> Weight {
// Proof Size summary in bytes:
// Measured: `327`
// Estimated: `3538`
// Minimum execution time: 22_173_000 picoseconds.
Weight::from_parts(22_774_000, 3538)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn update_mint_settings() -> Weight {
// Proof Size summary in bytes:
// Measured: `311`
// Estimated: `3538`
// Minimum execution time: 21_245_000 picoseconds.
Weight::from_parts(21_957_000, 3538)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
fn set_price() -> Weight {
// Proof Size summary in bytes:
// Measured: `493`
// Estimated: `4062`
// Minimum execution time: 30_559_000 picoseconds.
Weight::from_parts(31_877_000, 4062)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:1 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:2)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn buy_item() -> Weight {
// Proof Size summary in bytes:
// Measured: `655`
// Estimated: `4062`
// Minimum execution time: 66_567_000 picoseconds.
Weight::from_parts(68_264_000, 4062)
.saturating_add(T::DbWeight::get().reads(6_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// The range of component `n` is `[0, 10]`.
fn pay_tips(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 3_221_000 picoseconds.
Weight::from_parts(4_654_516, 0)
// Standard Error: 7_679
.saturating_add(Weight::from_parts(2_619_134, 0).saturating_mul(n.into()))
}
/// Storage: `Nfts::Item` (r:2 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn create_swap() -> Weight {
// Proof Size summary in bytes:
// Measured: `444`
// Estimated: `7134`
// Minimum execution time: 26_849_000 picoseconds.
Weight::from_parts(27_644_000, 7134)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::PendingSwapOf` (r:1 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
fn cancel_swap() -> Weight {
// Proof Size summary in bytes:
// Measured: `488`
// Estimated: `4062`
// Minimum execution time: 27_431_000 picoseconds.
Weight::from_parts(27_897_000, 4062)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:2 w:2)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:1 w:2)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:2 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:2 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:4)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:2)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
fn claim_swap() -> Weight {
// Proof Size summary in bytes:
// Measured: `771`
// Estimated: `7134`
// Minimum execution time: 110_387_000 picoseconds.
Weight::from_parts(112_526_000, 7134)
.saturating_add(T::DbWeight::get().reads(9_u64))
.saturating_add(T::DbWeight::get().writes(10_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:2 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:10 w:10)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:1)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 10]`.
fn mint_pre_signed(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `580`
// Estimated: `6054 + n * (2930 ±0)`
// Minimum execution time: 159_612_000 picoseconds.
Weight::from_parts(166_084_283, 6054)
// Standard Error: 67_116
.saturating_add(Weight::from_parts(43_826_364, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(6_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(n.into()))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:10 w:10)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 10]`.
fn set_attributes_pre_signed(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `575`
// Estimated: `4062 + n * (2930 ±0)`
// Minimum execution time: 75_695_000 picoseconds.
Weight::from_parts(89_915_935, 4062)
// Standard Error: 98_709
.saturating_add(Weight::from_parts(42_240_220, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(2_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(n.into()))
}
}

View file

@ -0,0 +1,449 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_payment_streams`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-mainnet-runtime/datahaven_mainnet_runtime.compact.compressed.wasm
// --pallet
// pallet_payment_streams
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/mainnet/src/weights/pallet_payment_streams.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_payment_streams`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_payment_streams::weights::WeightInfo for WeightInfo<T> {
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn create_fixed_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `523`
// Estimated: `6054`
// Minimum execution time: 107_606_000 picoseconds.
Weight::from_parts(108_915_000, 6054)
.saturating_add(T::DbWeight::get().reads(11_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
fn update_fixed_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1427`
// Estimated: `12414`
// Minimum execution time: 403_134_000 picoseconds.
Weight::from_parts(416_206_000, 12414)
.saturating_add(T::DbWeight::get().reads(21_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn delete_fixed_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1304`
// Estimated: `12414`
// Minimum execution time: 295_969_000 picoseconds.
Weight::from_parts(300_145_000, 12414)
.saturating_add(T::DbWeight::get().reads(22_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::AccumulatedPriceIndex` (r:1 w:0)
/// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
fn create_dynamic_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `525`
// Estimated: `6054`
// Minimum execution time: 110_904_000 picoseconds.
Weight::from_parts(113_365_000, 6054)
.saturating_add(T::DbWeight::get().reads(12_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
fn update_dynamic_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1387`
// Estimated: `12414`
// Minimum execution time: 351_490_000 picoseconds.
Weight::from_parts(354_309_000, 12414)
.saturating_add(T::DbWeight::get().reads(21_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn delete_dynamic_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1455`
// Estimated: `12414`
// Minimum execution time: 399_760_000 picoseconds.
Weight::from_parts(410_315_000, 12414)
.saturating_add(T::DbWeight::get().reads(22_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn charge_payment_streams() -> Weight {
// Proof Size summary in bytes:
// Measured: `1441`
// Estimated: `12414`
// Minimum execution time: 335_054_000 picoseconds.
Weight::from_parts(339_893_000, 12414)
.saturating_add(T::DbWeight::get().reads(21_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:10 w:10)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:10 w:10)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:10 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:12 w:12)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 10]`.
fn charge_multiple_users_payment_streams(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1122 + n * (331 ±0)`
// Estimated: `12414 + n * (2604 ±0)`
// Minimum execution time: 20_587_000 picoseconds.
Weight::from_parts(44_190_125, 12414)
// Standard Error: 170_219
.saturating_add(Weight::from_parts(294_748_615, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(12_u64))
.saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(1_u64))
.saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2604).saturating_mul(n.into()))
}
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1001 w:1001)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:999 w:999)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:999 w:999)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:999 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:999 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:999 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// The range of component `n` is `[1, 1000]`.
fn pay_outstanding_debt(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1422 + n * (644 ±0)`
// Estimated: `12414 + n * (3634 ±0)`
// Minimum execution time: 376_066_000 picoseconds.
Weight::from_parts(378_172_000, 12414)
// Standard Error: 147_940
.saturating_add(Weight::from_parts(283_749_757, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(11_u64))
.saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(4_u64))
.saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 3634).saturating_mul(n.into()))
}
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:1)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:0)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn clear_insolvent_flag() -> Weight {
// Proof Size summary in bytes:
// Measured: `231`
// Estimated: `3505`
// Minimum execution time: 22_472_000 picoseconds.
Weight::from_parts(23_180_000, 3505)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::AccumulatedPriceIndex` (r:1 w:1)
/// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
fn price_index_update() -> Weight {
// Proof Size summary in bytes:
// Measured: `116`
// Estimated: `1501`
// Minimum execution time: 5_847_000 picoseconds.
Weight::from_parts(6_187_000, 1501)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:1)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn tick_update() -> Weight {
// Proof Size summary in bytes:
// Measured: `114`
// Estimated: `1489`
// Minimum execution time: 3_884_000 picoseconds.
Weight::from_parts(4_063_000, 1489)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastSubmittersTickRegistered` (r:1 w:1)
/// Proof: `PaymentStreams::LastSubmittersTickRegistered` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:1 w:0)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::AccumulatedPriceIndex` (r:1 w:0)
/// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:244 w:244)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 244]`.
fn update_providers_last_chargeable_info(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `270 + n * (32 ±0)`
// Estimated: `11295 + n * (2543 ±0)`
// Minimum execution time: 12_468_000 picoseconds.
Weight::from_parts(9_805_506, 11295)
// Standard Error: 5_017
.saturating_add(Weight::from_parts(6_952_512, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(1_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2543).saturating_mul(n.into()))
}
}

View file

@ -0,0 +1,326 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_proofs_dealer`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-mainnet-runtime/datahaven_mainnet_runtime.compact.compressed.wasm
// --pallet
// pallet_proofs_dealer
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/mainnet/src/weights/pallet_proofs_dealer.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_proofs_dealer`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_proofs_dealer::weights::WeightInfo for WeightInfo<T> {
/// Storage: `ProofsDealer::ChallengesQueue` (r:1 w:1)
/// Proof: `ProofsDealer::ChallengesQueue` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`)
fn challenge() -> Weight {
// Proof Size summary in bytes:
// Measured: `41`
// Estimated: `4687`
// Minimum execution time: 11_710_000 picoseconds.
Weight::from_parts(12_273_000, 4687)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:2 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToChallengesSeed` (r:1 w:0)
/// Proof: `ProofsDealer::TickToChallengesSeed` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:1 w:0)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:1)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:5 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:1 w:1)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:2)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// The range of component `n` is `[1, 20]`.
fn submit_proof_no_checkpoint_challenges_key_proofs(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `2070`
// Estimated: `15270`
// Minimum execution time: 2_180_337_000 picoseconds.
Weight::from_parts(2_068_089_120, 15270)
// Standard Error: 256_975
.saturating_add(Weight::from_parts(139_273_283, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(30_u64))
.saturating_add(T::DbWeight::get().writes(9_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:0)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToChallengesSeed` (r:1 w:0)
/// Proof: `ProofsDealer::TickToChallengesSeed` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:1 w:0)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:1 w:1)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:2)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:1)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// The range of component `n` is `[21, 40]`.
fn submit_proof_with_checkpoint_challenges_key_proofs(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `2070`
// Estimated: `20676`
// Minimum execution time: 4_705_521_000 picoseconds.
Weight::from_parts(4_096_774_230, 20676)
// Standard Error: 968_637
.saturating_add(Weight::from_parts(38_494_397, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(39_u64))
.saturating_add(T::DbWeight::get().writes(11_u64))
}
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:1)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Randomness::LatestParentBlockRandomness` (r:1 w:0)
/// Proof: `Randomness::LatestParentBlockRandomness` (`max_values`: Some(1), `max_size`: Some(36), added: 531, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:1 w:0)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckForSlashableProviders` (r:1 w:1)
/// Proof: `ProofsDealer::TickToCheckForSlashableProviders` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:1001 w:2000)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1000 w:1000)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::SlashableProviders` (r:1000 w:1000)
/// Proof: `ProofsDealer::SlashableProviders` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1000 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1000 w:0)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToChallengesSeed` (r:0 w:1)
/// Proof: `ProofsDealer::TickToChallengesSeed` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 1000]`.
fn new_challenges_round(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1155 + n * (271 ±0)`
// Estimated: `6172 + n * (3634 ±0)`
// Minimum execution time: 29_450_000 picoseconds.
Weight::from_parts(30_176_000, 6172)
// Standard Error: 45_927
.saturating_add(Weight::from_parts(40_350_233, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(3_u64))
.saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 3634).saturating_mul(n.into()))
}
/// Storage: `ProofsDealer::PriorityChallengesQueue` (r:1 w:1)
/// Proof: `ProofsDealer::PriorityChallengesQueue` (`max_values`: Some(1), `max_size`: Some(3302), added: 3797, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesQueue` (r:1 w:1)
/// Proof: `ProofsDealer::ChallengesQueue` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:1)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:0 w:2)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 20]`.
fn new_checkpoint_challenge_round(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `65 + n * (32 ±0)`
// Estimated: `4787`
// Minimum execution time: 14_001_000 picoseconds.
Weight::from_parts(15_995_280, 4787)
// Standard Error: 3_445
.saturating_add(Weight::from_parts(449_577, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `ProofsDealer::PastBlocksStatus` (r:1 w:1)
/// Proof: `ProofsDealer::PastBlocksStatus` (`max_values`: Some(1), `max_size`: Some(51), added: 546, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::PastBlocksWeight` (r:1 w:0)
/// Proof: `ProofsDealer::PastBlocksWeight` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTickerPaused` (r:0 w:1)
/// Proof: `ProofsDealer::ChallengesTickerPaused` (`max_values`: Some(1), `max_size`: Some(0), added: 495, mode: `MaxEncodedLen`)
fn check_spamming_condition() -> Weight {
// Proof Size summary in bytes:
// Measured: `248`
// Estimated: `3501`
// Minimum execution time: 14_141_000 picoseconds.
Weight::from_parts(14_450_000, 3501)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `ProofsDealer::LastDeletedTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastDeletedTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn trim_valid_proof_submitters_last_ticks_constant_execution() -> Weight {
// Proof Size summary in bytes:
// Measured: `41`
// Estimated: `1489`
// Minimum execution time: 4_433_000 picoseconds.
Weight::from_parts(4_657_000, 1489)
.saturating_add(T::DbWeight::get().reads(2_u64))
}
/// Storage: `ProofsDealer::LastDeletedTick` (r:0 w:1)
/// Proof: `ProofsDealer::LastDeletedTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:0 w:1)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
fn trim_valid_proof_submitters_last_ticks_loop() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 2_533_000 picoseconds.
Weight::from_parts(2_701_000, 0)
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `ProofsDealer::PastBlocksWeight` (r:0 w:2)
/// Proof: `ProofsDealer::PastBlocksWeight` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`)
fn on_finalize() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 4_812_000 picoseconds.
Weight::from_parts(5_079_000, 0)
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:0)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:1)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
fn force_initialise_challenge_cycle() -> Weight {
// Proof Size summary in bytes:
// Measured: `552`
// Estimated: `4624`
// Minimum execution time: 44_569_000 picoseconds.
Weight::from_parts(46_326_000, 4624)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `ProofsDealer::ChallengesTickerPaused` (r:0 w:1)
/// Proof: `ProofsDealer::ChallengesTickerPaused` (`max_values`: Some(1), `max_size`: Some(0), added: 495, mode: `MaxEncodedLen`)
fn set_paused() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 7_440_000 picoseconds.
Weight::from_parts(7_760_000, 0)
.saturating_add(T::DbWeight::get().writes(1_u64))
}
}

View file

@ -0,0 +1,84 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_session`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-mainnet-runtime/datahaven_mainnet_runtime.compact.compressed.wasm
// --pallet
// pallet_session
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/mainnet/src/weights/pallet_session.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_session`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_session::WeightInfo for WeightInfo<T> {
/// Storage: `Session::NextKeys` (r:1 w:1)
/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `Session::KeyOwner` (r:4 w:4)
/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
fn set_keys() -> Weight {
// Proof Size summary in bytes:
// Measured: `350`
// Estimated: `11240`
// Minimum execution time: 36_482_000 picoseconds.
Weight::from_parts(37_467_000, 11240)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Session::NextKeys` (r:1 w:1)
/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `Session::KeyOwner` (r:0 w:4)
/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
fn purge_keys() -> Weight {
// Proof Size summary in bytes:
// Measured: `328`
// Estimated: `3793`
// Minimum execution time: 21_767_000 picoseconds.
Weight::from_parts(22_530_000, 3793)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
}

View file

@ -0,0 +1,630 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_storage_providers`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-mainnet-runtime/datahaven_mainnet_runtime.compact.compressed.wasm
// --pallet
// pallet_storage_providers
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/mainnet/src/weights/pallet_storage_providers.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_storage_providers`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_storage_providers::weights::WeightInfo for WeightInfo<T> {
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
fn request_msp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 87_582_000 picoseconds.
Weight::from_parts(89_898_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
fn request_bsp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 88_155_000 picoseconds.
Weight::from_parts(90_220_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Randomness::LatestOneEpochAgoRandomness` (r:1 w:0)
/// Proof: `Randomness::LatestOneEpochAgoRandomness` (`max_values`: Some(1), `max_size`: Some(36), added: 531, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:0 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:0 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn confirm_sign_up_bsp() -> Weight {
// Proof Size summary in bytes:
// Measured: `474`
// Estimated: `5628`
// Minimum execution time: 38_210_000 picoseconds.
Weight::from_parts(39_338_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Randomness::LatestOneEpochAgoRandomness` (r:1 w:0)
/// Proof: `Randomness::LatestOneEpochAgoRandomness` (`max_values`: Some(1), `max_size`: Some(36), added: 531, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:0 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:0 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:0 w:1)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn confirm_sign_up_msp() -> Weight {
// Proof Size summary in bytes:
// Measured: `487`
// Estimated: `5628`
// Minimum execution time: 54_698_000 picoseconds.
Weight::from_parts(55_937_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
fn cancel_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `507`
// Estimated: `5628`
// Minimum execution time: 65_127_000 picoseconds.
Weight::from_parts(65_875_000, 5628)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:102 w:101)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:0 w:1)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 100]`.
fn msp_sign_off(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `775 + n * (83 ±0)`
// Estimated: `8186 + n * (3598 ±0)`
// Minimum execution time: 91_582_000 picoseconds.
Weight::from_parts(91_148_393, 8186)
// Standard Error: 9_568
.saturating_add(Weight::from_parts(6_388_975, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(7_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 3598).saturating_mul(n.into()))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:0)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn bsp_sign_off() -> Weight {
// Proof Size summary in bytes:
// Measured: `720`
// Estimated: `4624`
// Minimum execution time: 92_255_000 picoseconds.
Weight::from_parts(93_446_000, 4624)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
fn change_capacity_bsp_less_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `679`
// Estimated: `4624`
// Minimum execution time: 82_856_000 picoseconds.
Weight::from_parts(85_018_000, 4624)
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
fn change_capacity_bsp_more_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `679`
// Estimated: `4624`
// Minimum execution time: 102_474_000 picoseconds.
Weight::from_parts(104_618_000, 4624)
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
fn change_capacity_msp_less_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `649`
// Estimated: `4608`
// Minimum execution time: 78_146_000 picoseconds.
Weight::from_parts(80_013_000, 4608)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
fn change_capacity_msp_more_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `649`
// Estimated: `4608`
// Minimum execution time: 97_535_000 picoseconds.
Weight::from_parts(99_407_000, 4608)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
fn add_value_prop() -> Weight {
// Proof Size summary in bytes:
// Measured: `591`
// Estimated: `4608`
// Minimum execution time: 45_319_000 picoseconds.
Weight::from_parts(46_335_000, 4608)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
fn make_value_prop_unavailable() -> Weight {
// Proof Size summary in bytes:
// Measured: `631`
// Estimated: `4608`
// Minimum execution time: 32_867_000 picoseconds.
Weight::from_parts(33_943_000, 4608)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn add_multiaddress() -> Weight {
// Proof Size summary in bytes:
// Measured: `508`
// Estimated: `4624`
// Minimum execution time: 34_149_000 picoseconds.
Weight::from_parts(35_552_000, 4624)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn remove_multiaddress() -> Weight {
// Proof Size summary in bytes:
// Measured: `1316`
// Estimated: `4624`
// Minimum execution time: 32_650_000 picoseconds.
Weight::from_parts(33_556_000, 4624)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:0 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:0 w:1)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn force_msp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 126_083_000 picoseconds.
Weight::from_parts(127_714_000, 5628)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(8_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:0 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn force_bsp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 104_033_000 picoseconds.
Weight::from_parts(106_787_000, 5628)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(8_u64))
}
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::SlashableProviders` (r:1 w:1)
/// Proof: `ProofsDealer::SlashableProviders` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
fn slash_without_awaiting_top_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `871`
// Estimated: `6172`
// Minimum execution time: 159_588_000 picoseconds.
Weight::from_parts(161_719_000, 6172)
.saturating_add(T::DbWeight::get().reads(9_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::SlashableProviders` (r:1 w:1)
/// Proof: `ProofsDealer::SlashableProviders` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:2 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::NextAvailableProviderTopUpExpirationShTick` (r:1 w:1)
/// Proof: `Providers::NextAvailableProviderTopUpExpirationShTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::ProviderTopUpExpirations` (r:1 w:1)
/// Proof: `Providers::ProviderTopUpExpirations` (`max_values`: None, `max_size`: Some(3322), added: 5797, mode: `MaxEncodedLen`)
fn slash_with_awaiting_top_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `871`
// Estimated: `6787`
// Minimum execution time: 126_797_000 picoseconds.
Weight::from_parts(129_937_000, 6787)
.saturating_add(T::DbWeight::get().reads(13_u64))
.saturating_add(T::DbWeight::get().writes(8_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::ProviderTopUpExpirations` (r:0 w:1)
/// Proof: `Providers::ProviderTopUpExpirations` (`max_values`: None, `max_size`: Some(3322), added: 5797, mode: `MaxEncodedLen`)
fn top_up_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `758`
// Estimated: `4624`
// Minimum execution time: 111_138_000 picoseconds.
Weight::from_parts(113_128_000, 4624)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::InsolventProviders` (r:2 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:1)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:1)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
fn delete_provider_bsp() -> Weight {
// Proof Size summary in bytes:
// Measured: `853`
// Estimated: `6038`
// Minimum execution time: 80_884_000 picoseconds.
Weight::from_parts(82_175_000, 6038)
.saturating_add(T::DbWeight::get().reads(12_u64))
.saturating_add(T::DbWeight::get().writes(9_u64))
}
/// Storage: `Providers::InsolventProviders` (r:1 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:22 w:21)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToBuckets` (r:21 w:20)
/// Proof: `Providers::MainStorageProviderIdsToBuckets` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:0 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 20]`.
/// The range of component `m` is `[0, 20]`.
fn delete_provider_msp(n: u32, m: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1845 + m * (54 ±0) + n * (83 ±0)`
// Estimated: `8186 + m * (2571 ±0) + n * (3598 ±0)`
// Minimum execution time: 184_840_000 picoseconds.
Weight::from_parts(79_815_534, 8186)
// Standard Error: 30_345
.saturating_add(Weight::from_parts(6_847_952, 0).saturating_mul(n.into()))
// Standard Error: 30_345
.saturating_add(Weight::from_parts(5_652_904, 0).saturating_mul(m.into()))
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(m.into())))
.saturating_add(T::DbWeight::get().writes(5_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(m.into())))
.saturating_add(Weight::from_parts(0, 2571).saturating_mul(m.into()))
.saturating_add(Weight::from_parts(0, 3598).saturating_mul(n.into()))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:0)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn stop_all_cycles() -> Weight {
// Proof Size summary in bytes:
// Measured: `549`
// Estimated: `4624`
// Minimum execution time: 27_400_000 picoseconds.
Weight::from_parts(27_944_000, 4624)
.saturating_add(T::DbWeight::get().reads(3_u64))
}
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:0 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:1)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
fn process_expired_provider_top_up_bsp() -> Weight {
// Proof Size summary in bytes:
// Measured: `1038`
// Estimated: `6172`
// Minimum execution time: 103_682_000 picoseconds.
Weight::from_parts(105_525_000, 6172)
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:0 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
fn process_expired_provider_top_up_msp() -> Weight {
// Proof Size summary in bytes:
// Measured: `775`
// Estimated: `6172`
// Minimum execution time: 83_347_000 picoseconds.
Weight::from_parts(84_976_000, 6172)
.saturating_add(T::DbWeight::get().reads(6_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
}

View file

@ -86,6 +86,7 @@ polkadot-runtime-common = { workspace = true }
precompile-utils = { workspace = true }
scale-info = { workspace = true, features = ["derive", "serde"] }
serde = { workspace = true, features = ["derive"] }
k256 = { workspace = true, optional = true }
serde_json = { workspace = true, default-features = false, features = [
"alloc",
] }
@ -361,6 +362,13 @@ runtime-benchmarks = [
"snowbridge-pallet-system/runtime-benchmarks",
"pallet-outbound-commitment-store/runtime-benchmarks",
"pallet-datahaven-native-transfer/runtime-benchmarks",
# StorageHub pallets
"pallet-nfts/runtime-benchmarks",
"pallet-file-system/runtime-benchmarks",
"pallet-proofs-dealer/runtime-benchmarks",
"pallet-payment-streams/runtime-benchmarks",
"pallet-storage-providers/runtime-benchmarks",
"dep:k256",
]
try-runtime = [

View file

@ -27,6 +27,7 @@ frame_benchmarking::define_benchmarks!(
// Substrate pallets
[pallet_balances, Balances]
[pallet_session, pallet_session_benchmarking::Pallet::<Runtime>]
// FIXME: benchmarking identity fail
// [pallet_identity, Identity]
[pallet_im_online, ImOnline]
@ -44,6 +45,13 @@ frame_benchmarking::define_benchmarks!(
[pallet_safe_mode, SafeMode]
[pallet_tx_pause, TxPause]
// StorageHub pallets
[pallet_nfts, Nfts]
[pallet_file_system, FileSystem]
[pallet_proofs_dealer, ProofsDealer]
[pallet_payment_streams, PaymentStreams]
[pallet_storage_providers, Providers]
// Governance pallets
[pallet_collective_technical_committee, TechnicalCommittee]
[pallet_collective_treasury_council, TreasuryCouncil]

View file

@ -91,7 +91,6 @@ use datahaven_runtime_common::{
},
time::{EpochDurationInBlocks, SessionsPerEra, DAYS, MILLISECS_PER_BLOCK},
};
use dhp_bridge::{EigenLayerMessageProcessor, NativeTokenTransferMessageProcessor};
use frame_support::{
derive_impl,
dispatch::DispatchClass,
@ -126,7 +125,7 @@ use snowbridge_core::{gwei, meth, AgentIdOf, PricingParameters, Rewards, TokenId
use snowbridge_inbound_queue_primitives::RewardLedger;
use snowbridge_outbound_queue_primitives::{
v1::{Fee, Message, SendMessage},
v2::{Command, ConstantGasMeter},
v2::ConstantGasMeter,
SendError, SendMessageFeeProvider,
};
use snowbridge_pallet_outbound_queue_v2::OnNewCommitment;
@ -387,7 +386,7 @@ impl pallet_session::Config for Runtime {
>;
type SessionHandler = <SessionKeys as OpaqueKeys>::KeyTypeIdProviders;
type Keys = SessionKeys;
type WeightInfo = pallet_session::weights::SubstrateWeight<Runtime>;
type WeightInfo = stagenet_weights::pallet_session::WeightInfo<Runtime>;
}
parameter_types! {
@ -1038,8 +1037,8 @@ impl pallet_evm_chain_id::Config for Runtime {}
// --- Snowbridge Config Constants & Parameter Types ---
parameter_types! {
// Hoodi testnet genesis hash
pub const StagenetGenesisHash: [u8; 32] = hex_literal::hex!("bbe312868b376a3001692a646dd2d7d1e4406380dfd86b98aa8a34d1557c971b");
// DataHaven stagenet genesis hash
pub const StagenetGenesisHash: [u8; 32] = hex_literal::hex!("72d0856fd339e09cb21df7bac8ac3120bd871e327ec0e1658395df68acef9bee");
pub UniversalLocation: InteriorLocation = [
GlobalConsensus(ByGenesis(StagenetGenesisHash::get()))
].into();
@ -1105,47 +1104,13 @@ impl snowbridge_pallet_system_v2::Config for Runtime {
type Helper = ();
}
// Fork versions for runtime benchmarks - must match the fixtures for BLS verification to work
// The fixtures are generated with standard testnet fork versions
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const ChainForkVersions: ForkVersions = ForkVersions {
genesis: Fork {
version: hex_literal::hex!("00000000"),
epoch: 0,
},
altair: Fork {
version: hex_literal::hex!("01000000"),
epoch: 0,
},
bellatrix: Fork {
version: hex_literal::hex!("02000000"),
epoch: 0,
},
capella: Fork {
version: hex_literal::hex!("03000000"),
epoch: 0,
},
deneb: Fork {
version: hex_literal::hex!("04000000"),
epoch: 0,
},
electra: Fork {
version: hex_literal::hex!("05000000"),
epoch: 80000000000,
},
fulu: Fork {
version: hex_literal::hex!("06000000"),
epoch: 90000000000,
},
};
}
// For tests, fast-runtime and std configurations we use the mocked fork versions
// These match the fork versions used by the local Ethereum network in E2E tests
#[cfg(all(
any(feature = "std", feature = "fast-runtime", test),
not(feature = "runtime-benchmarks")
#[cfg(any(
feature = "std",
feature = "fast-runtime",
feature = "runtime-benchmarks",
test
))]
parameter_types! {
pub const ChainForkVersions: ForkVersions = ForkVersions {
@ -1275,8 +1240,8 @@ impl snowbridge_pallet_inbound_queue_v2::Config for Runtime {
type GatewayAddress = runtime_params::dynamic_params::runtime_config::EthereumGatewayAddress;
#[cfg(not(feature = "runtime-benchmarks"))]
type MessageProcessor = (
EigenLayerMessageProcessor<Runtime>,
NativeTokenTransferMessageProcessor<Runtime>,
dhp_bridge::EigenLayerMessageProcessor<Runtime>,
dhp_bridge::NativeTokenTransferMessageProcessor<Runtime>,
);
#[cfg(feature = "runtime-benchmarks")]
type MessageProcessor = NoOpMessageProcessor;
@ -1746,6 +1711,7 @@ mod tests {
use snowbridge_inbound_queue_primitives::v2::{
EthereumAsset, Message as SnowbridgeMessage, MessageProcessor, Payload as SnowPayload,
};
use snowbridge_outbound_queue_primitives::v2::Command;
use sp_core::H160;
use sp_io::TestExternalities;
use xcm_builder::GlobalConsensusConvertsFor;
@ -1928,4 +1894,95 @@ mod tests {
assert!(result.is_ok(), "Message from authorized origin should be accepted");
});
}
/// Test that the ExternalValidatorRewardsAccount is correctly derived from the pallet ID.
///
/// This verifies that `PalletId(*b"dh/evrew").into_account_truncating()` produces the
/// expected AccountId20 value, which is used in the Rewards Agent ID computation.
#[test]
fn test_external_validator_rewards_account_derivation() {
// Expected account: "modl" (4 bytes) + "dh/evrew" (8 bytes) + zeros (8 bytes) = 20 bytes
// "modl" = 0x6d6f646c
// "dh/evrew" = 0x64682f6576726577
// Result = 0x6d6f646c64682f65767265770000000000000000
let expected_account = AccountId::from(hex_literal::hex!(
"6d6f646c64682f65767265770000000000000000"
));
let actual_account = ExternalValidatorRewardsAccount::get();
assert_eq!(
actual_account, expected_account,
"ExternalValidatorRewardsAccount must be derived correctly from PalletId 'dh/evrew'"
);
}
/// Test that the Rewards Agent ID (used for Snowbridge outbound messages from the rewards pallet)
/// is correctly computed from the chain's genesis hash and the ExternalValidatorRewardsAccount.
///
/// This test verifies the value that should be set as `RewardsAgentOrigin` in runtime parameters
/// and as `rewardsMessageOrigin` in the AVS contract configuration.
///
/// The Agent ID is computed following Snowbridge's pattern for GlobalConsensus locations:
/// blake2_256(SCALE_ENCODE("GlobalConsensus", ByGenesis(genesis_hash), compact_len, "AccountKey20", account_key))
///
/// Note: Standard `AgentIdOf` doesn't support direct AccountKey20 without a Parachain junction,
/// so we compute the hash directly here.
#[test]
fn test_rewards_agent_id_computation() {
use codec::Encode;
use sp_core::H256;
use sp_io::hashing::blake2_256;
use xcm::prelude::NetworkId;
// Use the StagenetGenesisHash parameter
let genesis_hash: [u8; 32] = StagenetGenesisHash::get();
// Get the rewards pallet account (derived from PalletId "dh/evrew")
let rewards_account: [u8; 20] = ExternalValidatorRewardsAccount::get().into();
// Build the location description following Snowbridge's encoding pattern:
// ("GlobalConsensus", ByGenesis(genesis_hash), compact_len(interior), "AccountKey20", account_key)
//
// This matches the pattern in snowbridge_core::location::DescribeGlobalPrefix
// combined with DescribeTokenTerminal for AccountKey20.
// Interior description: "AccountKey20" + account_key (no length prefix for fixed arrays)
let interior: Vec<u8> = (b"AccountKey20", rewards_account).encode();
// Full encoding: "GlobalConsensus" + NetworkId::ByGenesis(genesis) + interior
let encoded: Vec<u8> = (
b"GlobalConsensus",
NetworkId::ByGenesis(genesis_hash),
interior,
)
.encode();
// Hash with blake2_256
let computed_agent_id = H256(blake2_256(&encoded));
// Expected Agent ID - this value must match RewardsAgentOrigin in runtime_params.rs
// If this test fails, update RewardsAgentOrigin to match the computed value.
let expected_agent_id = H256(hex_literal::hex!(
"56490bd3f367447bfaf57bb18e7a45e1b2db7d538fe42098e87d2aa106c6afdd"
));
assert_eq!(
computed_agent_id,
expected_agent_id,
"Computed Rewards Agent ID must match expected value.\n\
This value should be set as:\n\
- RewardsAgentOrigin in runtime_params.rs\n\
- rewardsMessageOrigin in AVS contract config\n\
\n\
Rewards account: 0x{}\n\
Genesis hash: 0x{}\n\
Computed: {:?}\n\
Expected: {:?}",
hex::encode(rewards_account),
hex::encode(genesis_hash),
computed_agent_id,
expected_agent_id
);
}
}

View file

@ -51,10 +51,14 @@ pub mod dynamic_params {
#[codec(index = 3)]
#[allow(non_upper_case_globals)]
/// The RewardsAgentOrigin is the origin of the rewards agent, which is its ID.
/// TODO: Decide which agent origin we want to use. Currently for testing it's the zero hash
/// The RewardsAgentOrigin is the Agent ID for the rewards pallet's outbound Snowbridge messages.
/// Computed as: blake2_256(SCALE_ENCODE("GlobalConsensus", ByGenesis(genesis_hash), interior))
/// where interior = SCALE_ENCODE("AccountKey20", ExternalValidatorRewardsAccount)
///
/// For stagenet with genesis hash 0x72d0856fd339e09cb21df7bac8ac3120bd871e327ec0e1658395df68acef9bee
/// and rewards account 0x6d6f646c64682f65767265770000000000000000 (from PalletId "dh/evrew"):
pub static RewardsAgentOrigin: H256 = H256::from_slice(&hex!(
"0000000000000000000000000000000000000000000000000000000000000000"
"56490bd3f367447bfaf57bb18e7a45e1b2db7d538fe42098e87d2aa106c6afdd"
));
// Proportion of fees allocated to the Treasury (remainder are burned).

View file

@ -14,9 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
#[cfg(not(feature = "runtime-benchmarks"))]
use super::HAVE;
#[cfg(feature = "runtime-benchmarks")]
use super::MICROHAVE;
use super::{
AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason,
TreasuryAccount, HAVE,
TreasuryAccount,
};
use crate::configs::runtime_params::dynamic_params::runtime_config;
use crate::{
@ -24,6 +28,8 @@ use crate::{
HOURS,
};
use core::marker::PhantomData;
#[cfg(feature = "runtime-benchmarks")]
use datahaven_runtime_common::benchmarking::StorageHubBenchmarking;
use datahaven_runtime_common::time::{DAYS, MINUTES};
use frame_support::pallet_prelude::DispatchClass;
use frame_support::traits::AsEnsureOriginWithArg;
@ -33,7 +39,7 @@ use frame_support::{
weights::Weight,
};
use frame_system::pallet_prelude::BlockNumberFor;
use frame_system::{EnsureRoot, EnsureSigned};
use frame_system::EnsureSigned;
use num_bigint::BigUint;
use pallet_nfts::PalletFeatures;
use polkadot_runtime_common::prod_or_fast;
@ -68,6 +74,7 @@ pub type StorageProofsMerkleTrieLayout = LayoutV1<BlakeTwo256>;
pub type Hashing = BlakeTwo256;
/****** NFTs pallet ******/
#[cfg(not(feature = "runtime-benchmarks"))]
parameter_types! {
pub const CollectionDeposit: Balance = 100 * HAVE;
pub const ItemDeposit: Balance = 1 * HAVE;
@ -80,6 +87,19 @@ parameter_types! {
pub const MaxAttributesPerCall: u32 = 10;
pub Features: PalletFeatures = PalletFeatures::all_enabled();
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const CollectionDeposit: Balance = 100 * MICROHAVE;
pub const ItemDeposit: Balance = 1 * MICROHAVE;
pub const MetadataDepositBase: Balance = 10 * MICROHAVE;
pub const MetadataDepositPerByte: Balance = 1 * MICROHAVE;
pub const ApprovalsLimit: u32 = 20;
pub const ItemAttributesApprovalsLimit: u32 = 20;
pub const MaxTips: u32 = 10;
pub const MaxDeadlineDuration: BlockNumber = 12 * 30 * DAYS;
pub const MaxAttributesPerCall: u32 = 10;
pub Features: PalletFeatures = PalletFeatures::all_enabled();
}
impl pallet_nfts::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
@ -104,11 +124,66 @@ impl pallet_nfts::Config for Runtime {
type Features = Features;
type OffchainSignature = Signature;
type OffchainPublic = <Signature as Verify>::Signer;
type WeightInfo = pallet_nfts::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_nfts::WeightInfo<Runtime>;
type Locker = ();
#[cfg(feature = "runtime-benchmarks")]
type Helper = benchmark_helpers::NftHelper;
}
/****** ****** ****** ******/
#[cfg(feature = "runtime-benchmarks")]
pub mod benchmark_helpers {
use crate::{AccountId, Signature};
use k256::ecdsa::SigningKey;
use sp_runtime::traits::{IdentifyAccount, Verify};
use sp_runtime::MultiSignature;
const BENCH_SIGNING_KEY: [u8; 32] = [1u8; 32];
fn bench_signing_key() -> SigningKey {
SigningKey::from_bytes(&BENCH_SIGNING_KEY.into())
.expect("benchmark signing key is valid; qed")
}
/// Benchmark helper for NFTs pallet
pub struct NftHelper;
impl pallet_nfts::BenchmarkHelper<u32, u32, <Signature as Verify>::Signer, AccountId, Signature>
for NftHelper
{
fn collection(i: u16) -> u32 {
i.into()
}
fn item(i: u16) -> u32 {
i.into()
}
fn signer() -> (<Signature as Verify>::Signer, AccountId) {
let signing_key = bench_signing_key();
let verifying_key = signing_key.verifying_key();
let encoded = verifying_key.to_encoded_point(true);
let public =
sp_core::ecdsa::Public::from_full(encoded.as_bytes()).expect("valid key; qed");
let public_key: <Signature as Verify>::Signer = public.into();
let account: AccountId = public_key.clone().into_account();
(public_key, account)
}
fn sign(_public: &<Signature as Verify>::Signer, message: &[u8]) -> Signature {
let digest = sp_io::hashing::keccak_256(message);
let (sig, recovery_id) = bench_signing_key()
.sign_prehash_recoverable(&digest)
.expect("signing with fixed key never fails; qed");
let mut sig_bytes = [0u8; 65];
sig_bytes[..64].copy_from_slice(&sig.to_bytes());
sig_bytes[64] = recovery_id.to_byte();
let sig = sp_core::ecdsa::Signature::from_raw(sig_bytes);
Signature::from(MultiSignature::Ecdsa(sig))
}
}
}
/****** Relay Randomness pallet ******/
impl pallet_randomness::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
@ -151,6 +226,7 @@ impl sp_runtime::traits::BlockNumberProvider for BlockNumberGetter {
/****** ****** ****** ******/
/****** Storage Providers pallet ******/
#[cfg(not(feature = "runtime-benchmarks"))]
parameter_types! {
pub const SpMinDeposit: Balance = 100 * HAVE;
pub const BucketDeposit: Balance = 100 * HAVE;
@ -159,10 +235,47 @@ parameter_types! {
// TODO: If the next line is uncommented (which should be eventually, replacing the line above), compilation breaks (most likely because of mismatched dependency issues)
// pub const MaxBlocksForRandomness: BlockNumber = prod_or_fast!(2 * runtime_constants::time::EPOCH_DURATION_IN_SLOTS, 2 * MINUTES);
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const SpMinDeposit: Balance = StorageHubBenchmarking::SP_MIN_DEPOSIT;
pub const BucketDeposit: Balance = StorageHubBenchmarking::BUCKET_DEPOSIT;
pub const BspSignUpLockPeriod: BlockNumber = 90 * DAYS; // ~3 months
pub const MaxBlocksForRandomness: BlockNumber = prod_or_fast!(2 * HOURS, 2 * MINUTES);
// TODO: If the next line is uncommented (which should be eventually, replacing the line above), compilation breaks (most likely because of mismatched dependency issues)
// pub const MaxBlocksForRandomness: BlockNumber = prod_or_fast!(2 * runtime_constants::time::EPOCH_DURATION_IN_SLOTS, 2 * MINUTES);
}
#[cfg(feature = "runtime-benchmarks")]
pub struct StorageHubTreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
impl Get<AccountId> for StorageHubTreasuryAccount {
fn get() -> AccountId {
let account = TreasuryAccount::get();
StorageHubBenchmarking::ensure_treasury_account::<AccountId, Balance, Balances>(account)
}
}
// Benchmark helpers for Storage Providers pallet.
#[cfg(feature = "runtime-benchmarks")]
pub struct ProvidersBenchmarkHelpers;
#[cfg(feature = "runtime-benchmarks")]
impl pallet_storage_providers::benchmarking::BenchmarkHelpers<Runtime>
for ProvidersBenchmarkHelpers
{
type ProviderId = <Runtime as pallet_storage_providers::Config>::ProviderId;
fn set_accrued_failed_proofs(provider_id: Self::ProviderId, value: u32) {
pallet_proofs_dealer::SlashableProviders::<Runtime>::insert(provider_id, value);
}
fn get_accrued_failed_proofs(provider_id: Self::ProviderId) -> u32 {
pallet_proofs_dealer::SlashableProviders::<Runtime>::get(provider_id).unwrap_or(0)
}
}
impl pallet_storage_providers::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_storage_providers::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_storage_providers::WeightInfo<Runtime>;
type ProvidersRandomness = pallet_randomness::RandomnessFromOneEpochAgo<Runtime>;
type PaymentStreams = PaymentStreams;
type ProofDealer = ProofsDealer;
@ -188,7 +301,10 @@ impl pallet_storage_providers::Config for Runtime {
type ProvidersProofSubmitters = ProofsDealer;
type ReputationWeightType = u32;
type StorageHubTickGetter = ProofsDealer;
#[cfg(not(feature = "runtime-benchmarks"))]
type Treasury = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type Treasury = StorageHubTreasuryAccount;
type SpMinDeposit = SpMinDeposit;
type SpMinCapacity = ConstU64<2>;
type DepositPerData = ConstU128<2>;
@ -208,6 +324,8 @@ impl pallet_storage_providers::Config for Runtime {
type ZeroSizeBucketFixedRate = runtime_config::ZeroSizeBucketFixedRate;
type ProviderTopUpTtl = runtime_config::ProviderTopUpTtl;
type MaxExpiredItemsInBlock = ConstU32<100>;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelpers = ProvidersBenchmarkHelpers;
}
pub struct StorageDataUnitAndBalanceConverter;
@ -240,7 +358,7 @@ parameter_types! {
impl pallet_payment_streams::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_payment_streams::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_payment_streams::WeightInfo<Runtime>;
type NativeBalance = Balances;
type ProvidersPallet = Providers;
type RuntimeHoldReason = RuntimeHoldReason;
@ -250,7 +368,10 @@ impl pallet_payment_streams::Config for Runtime {
type BlockNumberToBalance = BlockNumberToBalance;
type ProvidersProofSubmitters = ProofsDealer;
type TreasuryCutCalculator = LinearThenPowerOfTwoTreasuryCutCalculator<Runtime, Perbill>;
#[cfg(not(feature = "runtime-benchmarks"))]
type TreasuryAccount = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type TreasuryAccount = StorageHubTreasuryAccount;
type MaxUsersToCharge = ConstU32<10>;
type BaseDeposit = ConstU128<10>;
}
@ -279,6 +400,14 @@ const MAX_CUSTOM_CHALLENGES_PER_BLOCK: u32 = 10;
const TOTAL_MAX_CHALLENGES_PER_BLOCK: u32 =
RANDOM_CHALLENGES_PER_BLOCK + MAX_CUSTOM_CHALLENGES_PER_BLOCK;
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const BenchmarkStakeToChallengePeriod: Balance =
StorageHubBenchmarking::STAKE_TO_CHALLENGE_PERIOD;
pub const BenchmarkCheckpointChallengePeriod: BlockNumber =
StorageHubBenchmarking::CHECKPOINT_CHALLENGE_PERIOD;
}
parameter_types! {
pub const RandomChallengesPerBlock: u32 = RANDOM_CHALLENGES_PER_BLOCK;
pub const MaxCustomChallengesPerBlock: u32 = MAX_CUSTOM_CHALLENGES_PER_BLOCK;
@ -293,7 +422,7 @@ parameter_types! {
impl pallet_proofs_dealer::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_proofs_dealer::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_proofs_dealer::WeightInfo<Runtime>;
type ProvidersPallet = Providers;
type NativeBalance = Balances;
type MerkleTrieHash = Hash;
@ -306,29 +435,50 @@ impl pallet_proofs_dealer::Config for Runtime {
{ shp_constants::FILE_SIZE_TO_CHALLENGES },
>;
type StakeToBlockNumber = SaturatingBalanceToBlockNumber;
#[cfg(feature = "runtime-benchmarks")]
type RandomChallengesPerBlock = ConstU32<0>;
#[cfg(not(feature = "runtime-benchmarks"))]
type RandomChallengesPerBlock = RandomChallengesPerBlock;
#[cfg(feature = "runtime-benchmarks")]
type MaxCustomChallengesPerBlock = TotalMaxChallengesPerBlock;
#[cfg(not(feature = "runtime-benchmarks"))]
type MaxCustomChallengesPerBlock = MaxCustomChallengesPerBlock;
type MaxSubmittersPerTick = MaxSubmittersPerTick;
type TargetTicksStorageOfSubmitters = TargetTicksStorageOfSubmitters;
type ChallengeHistoryLength = ChallengeHistoryLength;
type ChallengesQueueLength = ChallengesQueueLength;
#[cfg(not(feature = "runtime-benchmarks"))]
type CheckpointChallengePeriod = runtime_config::CheckpointChallengePeriod;
#[cfg(feature = "runtime-benchmarks")]
type CheckpointChallengePeriod = BenchmarkCheckpointChallengePeriod;
type ChallengesFee = ChallengesFee;
type PriorityChallengesFee = PriorityChallengesFee;
#[cfg(not(feature = "runtime-benchmarks"))]
type Treasury = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type Treasury = StorageHubTreasuryAccount;
// TODO: Once the client logic to keep track of CR randomness deadlines and execute their submissions is implemented
// AND after the chain has been live for enough time to have enough providers to avoid the commit-reveal randomness being
// gameable, the randomness provider should be CrRandomness
type RandomnessProvider = pallet_randomness::ParentBlockRandomness<Runtime>;
#[cfg(not(feature = "runtime-benchmarks"))]
type StakeToChallengePeriod = runtime_config::StakeToChallengePeriod;
#[cfg(feature = "runtime-benchmarks")]
type StakeToChallengePeriod = BenchmarkStakeToChallengePeriod;
type MinChallengePeriod = runtime_config::MinChallengePeriod;
type ChallengeTicksTolerance = ChallengeTicksTolerance;
type BlockFullnessPeriod = ChallengeTicksTolerance; // We purposely set this to `ChallengeTicksTolerance` so that spamming of the chain is evaluated for the same blocks as the tolerance BSPs are given.
type BlockFullnessHeadroom = BlockFullnessHeadroom;
type MinNotFullBlocksRatio = MinNotFullBlocksRatio;
type MaxSlashableProvidersPerTick = MaxSlashableProvidersPerTick;
type ChallengeOrigin = EnsureRoot<AccountId>;
type PriorityChallengeOrigin = EnsureRoot<AccountId>;
#[cfg(not(feature = "runtime-benchmarks"))]
type ChallengeOrigin = frame_system::EnsureRoot<AccountId>;
#[cfg(feature = "runtime-benchmarks")]
type ChallengeOrigin = EnsureSigned<AccountId>;
#[cfg(not(feature = "runtime-benchmarks"))]
type PriorityChallengeOrigin = frame_system::EnsureRoot<AccountId>;
#[cfg(feature = "runtime-benchmarks")]
type PriorityChallengeOrigin = EnsureSigned<AccountId>;
}
// Converter from the Balance type to the BlockNumber type for math.
@ -452,12 +602,24 @@ impl Get<u32> for MaxSlashableProvidersPerTick {
type ThresholdType = u32;
pub type ReplicationTargetType = u32;
#[cfg(not(feature = "runtime-benchmarks"))]
parameter_types! {
pub const BaseStorageRequestCreationDeposit: Balance = 1 * HAVE;
pub const FileDeletionRequestCreationDeposit: Balance = 1 * HAVE;
pub const FileSystemStorageRequestCreationHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::StorageRequestCreationHold);
pub const FileSystemFileDeletionRequestHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::FileDeletionRequestHold);
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const BaseStorageRequestCreationDeposit: Balance = 1 * MICROHAVE;
pub const FileDeletionRequestCreationDeposit: Balance = 1 * MICROHAVE;
pub const FileSystemStorageRequestCreationHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::StorageRequestCreationHold);
pub const FileSystemFileDeletionRequestHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::FileDeletionRequestHold);
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const BenchmarkBspStopStoringFilePenalty: Balance = 1 * MICROHAVE;
}
// Converts a given signed message in a EIP-191 compliant message bytes to verify.
/// EIP-191: https://eips.ethereum.org/EIPS/eip-191
@ -480,7 +642,7 @@ impl shp_traits::MessageAdapter for Eip191Adapter {
impl pallet_file_system::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_file_system::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_file_system::WeightInfo<Runtime>;
type Providers = Providers;
type ProofDealer = ProofsDealer;
type PaymentStreams = PaymentStreams;
@ -500,8 +662,14 @@ impl pallet_file_system::Config for Runtime {
type RuntimeHoldReason = RuntimeHoldReason;
type Nfts = Nfts;
type CollectionInspector = BucketNfts;
#[cfg(not(feature = "runtime-benchmarks"))]
type BspStopStoringFilePenalty = runtime_config::BspStopStoringFilePenalty;
#[cfg(feature = "runtime-benchmarks")]
type BspStopStoringFilePenalty = BenchmarkBspStopStoringFilePenalty;
#[cfg(not(feature = "runtime-benchmarks"))]
type TreasuryAccount = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type TreasuryAccount = StorageHubTreasuryAccount;
type MaxBatchConfirmStorageRequests = ConstU32<100>;
type MaxFilePathSize = ConstU32<512u32>;
type MaxPeerIdSize = ConstU32<100>;

View file

@ -267,7 +267,7 @@ pub fn dorothy() -> AccountId {
}
pub fn ethan() -> AccountId {
AccountId::from(hex!("Ff64d3F6efE2317EE2807d2235B1ac2AA69d9E87"))
AccountId::from(hex!("Ff64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB"))
}
pub fn frank() -> AccountId {

View file

@ -145,7 +145,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
// `spec_version`, and `authoring_version` are the same between Wasm and native.
// This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use
// the compatible custom types.
spec_version: 1000,
spec_version: 1100,
impl_version: 1,
apis: RUNTIME_API_VERSIONS,
transaction_version: 1,
@ -203,7 +203,7 @@ parameter_types! {
parameter_types! {
// TODO: Change ED to 1 after upgrade to Polkadot SDK stable2503
// cfr. https://github.com/paritytech/polkadot-sdk/pull/7379
pub const ExistentialDeposit: Balance = 100;
pub const ExistentialDeposit: Balance = 1;
}
/// The version information used to identify this runtime when compiled natively.
@ -974,6 +974,7 @@ impl_runtime_apis! {
use frame_system_benchmarking::Pallet as SystemBench;
impl frame_system_benchmarking::Config for Runtime {}
impl pallet_session_benchmarking::Config for Runtime {}
impl baseline::Config for Runtime {}
use frame_support::traits::WhitelistedStorageKeys;

View file

@ -35,8 +35,13 @@ pub mod pallet_babe;
pub mod pallet_balances;
pub mod pallet_beefy_mmr;
pub mod pallet_evm;
pub mod pallet_file_system;
pub mod pallet_grandpa;
pub mod pallet_nfts;
pub mod pallet_payment_streams;
pub mod pallet_proofs_dealer;
pub mod pallet_randomness;
pub mod pallet_storage_providers;
// pub mod pallet_identity;
pub mod pallet_im_online;
pub mod pallet_message_queue;
@ -48,6 +53,7 @@ pub mod pallet_preimage;
pub mod pallet_proxy;
pub mod pallet_safe_mode;
pub mod pallet_scheduler;
pub mod pallet_session;
pub mod pallet_sudo;
pub mod pallet_timestamp;
pub mod pallet_transaction_payment;

View file

@ -0,0 +1,5 @@
//! Weights for `pallet_file_system`.
//!
//! Generated weights should overwrite this file.
pub use pallet_file_system::weights::SubstrateWeight as WeightInfo;

View file

@ -0,0 +1,728 @@
//! Autogenerated weights for `pallet_nfts`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2025-11-14, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.compact.compressed.wasm
// --pallet
// pallet_nfts
// --extrinsic
//
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/stagenet/src/weights/pallet_nfts.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_nfts`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_nfts::WeightInfo for WeightInfo<T> {
/// Storage: `Nfts::NextCollectionId` (r:1 w:1)
/// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:0 w:1)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:1)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn create() -> Weight {
// Proof Size summary in bytes:
// Measured: `271`
// Estimated: `3537`
// Minimum execution time: 47_279_000 picoseconds.
Weight::from_parts(48_666_000, 3537)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::NextCollectionId` (r:1 w:1)
/// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:0 w:1)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:1)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn force_create() -> Weight {
// Proof Size summary in bytes:
// Measured: `76`
// Estimated: `3537`
// Minimum execution time: 25_473_000 picoseconds.
Weight::from_parts(26_241_000, 3537)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:0)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:1)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1001 w:1000)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1000 w:1000)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionMetadataOf` (r:0 w:1)
/// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:1)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// The range of component `m` is `[0, 1000]`.
/// The range of component `c` is `[0, 1000]`.
/// The range of component `a` is `[0, 1000]`.
fn destroy(m: u32, c: u32, a: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `32179 + a * (366 ±0)`
// Estimated: `2523990 + a * (2930 ±0)`
// Minimum execution time: 1_381_577_000 picoseconds.
Weight::from_parts(756_122_428, 2523990)
// Standard Error: 12_048
.saturating_add(Weight::from_parts(476_790, 0).saturating_mul(m.into()))
// Standard Error: 12_048
.saturating_add(Weight::from_parts(51_253, 0).saturating_mul(c.into()))
// Standard Error: 12_048
.saturating_add(Weight::from_parts(8_131_406, 0).saturating_mul(a.into()))
.saturating_add(T::DbWeight::get().reads(1004_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into())))
.saturating_add(T::DbWeight::get().writes(1005_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(a.into()))
}
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
fn mint() -> Weight {
// Proof Size summary in bytes:
// Measured: `418`
// Estimated: `4062`
// Minimum execution time: 67_882_000 picoseconds.
Weight::from_parts(69_718_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
fn force_mint() -> Weight {
// Proof Size summary in bytes:
// Measured: `418`
// Estimated: `4062`
// Minimum execution time: 65_679_000 picoseconds.
Weight::from_parts(66_549_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Nfts::Attribute` (r:1 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:0)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:0 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn burn() -> Weight {
// Proof Size summary in bytes:
// Measured: `526`
// Estimated: `4062`
// Minimum execution time: 73_580_000 picoseconds.
Weight::from_parts(75_125_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:2)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `555`
// Estimated: `4062`
// Minimum execution time: 56_312_000 picoseconds.
Weight::from_parts(58_020_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:5000 w:5000)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// The range of component `i` is `[0, 5000]`.
fn redeposit(i: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `750 + i * (83 ±0)`
// Estimated: `3538 + i * (3072 ±0)`
// Minimum execution time: 19_062_000 picoseconds.
Weight::from_parts(19_305_000, 3538)
// Standard Error: 24_093
.saturating_add(Weight::from_parts(25_028_153, 0).saturating_mul(i.into()))
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into())))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
.saturating_add(Weight::from_parts(0, 3072).saturating_mul(i.into()))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn lock_item_transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `423`
// Estimated: `3522`
// Minimum execution time: 24_311_000 picoseconds.
Weight::from_parts(24_973_000, 3522)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn unlock_item_transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `423`
// Estimated: `3522`
// Minimum execution time: 24_194_000 picoseconds.
Weight::from_parts(24_755_000, 3522)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn lock_collection() -> Weight {
// Proof Size summary in bytes:
// Measured: `327`
// Estimated: `3538`
// Minimum execution time: 19_916_000 picoseconds.
Weight::from_parts(20_550_000, 3538)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1)
/// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:2)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn transfer_ownership() -> Weight {
// Proof Size summary in bytes:
// Measured: `524`
// Estimated: `3581`
// Minimum execution time: 35_006_000 picoseconds.
Weight::from_parts(35_968_000, 3581)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:2 w:4)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
fn set_team() -> Weight {
// Proof Size summary in bytes:
// Measured: `344`
// Estimated: `6054`
// Minimum execution time: 49_456_000 picoseconds.
Weight::from_parts(50_590_000, 6054)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:2)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn force_collection_owner() -> Weight {
// Proof Size summary in bytes:
// Measured: `298`
// Estimated: `3537`
// Minimum execution time: 20_463_000 picoseconds.
Weight::from_parts(20_872_000, 3537)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn force_collection_config() -> Weight {
// Proof Size summary in bytes:
// Measured: `276`
// Estimated: `3537`
// Minimum execution time: 16_403_000 picoseconds.
Weight::from_parts(17_022_000, 3537)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn lock_item_properties() -> Weight {
// Proof Size summary in bytes:
// Measured: `423`
// Estimated: `3522`
// Minimum execution time: 22_791_000 picoseconds.
Weight::from_parts(23_182_000, 3522)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:1)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
fn set_attribute() -> Weight {
// Proof Size summary in bytes:
// Measured: `514`
// Estimated: `3920`
// Minimum execution time: 68_893_000 picoseconds.
Weight::from_parts(70_418_000, 3920)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:1)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
fn force_set_attribute() -> Weight {
// Proof Size summary in bytes:
// Measured: `331`
// Estimated: `3920`
// Minimum execution time: 33_040_000 picoseconds.
Weight::from_parts(33_469_000, 3920)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Attribute` (r:1 w:1)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
fn clear_attribute() -> Weight {
// Proof Size summary in bytes:
// Measured: `958`
// Estimated: `3920`
// Minimum execution time: 62_760_000 picoseconds.
Weight::from_parts(64_137_000, 3920)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
fn approve_item_attributes() -> Weight {
// Proof Size summary in bytes:
// Measured: `356`
// Estimated: `4062`
// Minimum execution time: 20_851_000 picoseconds.
Weight::from_parts(21_234_000, 4062)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1001 w:1000)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 1000]`.
fn cancel_item_attributes_approval(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `769 + n * (386 ±0)`
// Estimated: `4062 + n * (2930 ±0)`
// Minimum execution time: 32_914_000 picoseconds.
Weight::from_parts(33_415_000, 4062)
// Standard Error: 7_498
.saturating_add(Weight::from_parts(7_720_860, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(2_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(n.into()))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:1)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
fn set_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `514`
// Estimated: `3800`
// Minimum execution time: 56_827_000 picoseconds.
Weight::from_parts(57_851_000, 3800)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:1)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn clear_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `824`
// Estimated: `3800`
// Minimum execution time: 53_669_000 picoseconds.
Weight::from_parts(54_640_000, 3800)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1)
/// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`)
fn set_collection_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `373`
// Estimated: `3759`
// Minimum execution time: 51_403_000 picoseconds.
Weight::from_parts(52_206_000, 3759)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1)
/// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`)
fn clear_collection_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `691`
// Estimated: `3759`
// Minimum execution time: 50_720_000 picoseconds.
Weight::from_parts(51_692_000, 3759)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn approve_transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `385`
// Estimated: `4062`
// Minimum execution time: 24_116_000 picoseconds.
Weight::from_parts(25_104_000, 4062)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
fn cancel_approval() -> Weight {
// Proof Size summary in bytes:
// Measured: `382`
// Estimated: `4062`
// Minimum execution time: 20_907_000 picoseconds.
Weight::from_parts(21_484_000, 4062)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
fn clear_all_transfer_approvals() -> Weight {
// Proof Size summary in bytes:
// Measured: `382`
// Estimated: `4062`
// Minimum execution time: 19_916_000 picoseconds.
Weight::from_parts(20_689_000, 4062)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1)
/// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn set_accept_ownership() -> Weight {
// Proof Size summary in bytes:
// Measured: `76`
// Estimated: `3505`
// Minimum execution time: 17_199_000 picoseconds.
Weight::from_parts(17_750_000, 3505)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
fn set_collection_max_supply() -> Weight {
// Proof Size summary in bytes:
// Measured: `327`
// Estimated: `3538`
// Minimum execution time: 22_256_000 picoseconds.
Weight::from_parts(22_786_000, 3538)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn update_mint_settings() -> Weight {
// Proof Size summary in bytes:
// Measured: `311`
// Estimated: `3538`
// Minimum execution time: 21_133_000 picoseconds.
Weight::from_parts(21_821_000, 3538)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
fn set_price() -> Weight {
// Proof Size summary in bytes:
// Measured: `493`
// Estimated: `4062`
// Minimum execution time: 30_502_000 picoseconds.
Weight::from_parts(31_519_000, 4062)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:1 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:2)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn buy_item() -> Weight {
// Proof Size summary in bytes:
// Measured: `655`
// Estimated: `4062`
// Minimum execution time: 66_549_000 picoseconds.
Weight::from_parts(67_947_000, 4062)
.saturating_add(T::DbWeight::get().reads(6_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// The range of component `n` is `[0, 10]`.
fn pay_tips(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 3_265_000 picoseconds.
Weight::from_parts(4_739_944, 0)
// Standard Error: 7_976
.saturating_add(Weight::from_parts(2_546_489, 0).saturating_mul(n.into()))
}
/// Storage: `Nfts::Item` (r:2 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn create_swap() -> Weight {
// Proof Size summary in bytes:
// Measured: `444`
// Estimated: `7134`
// Minimum execution time: 26_741_000 picoseconds.
Weight::from_parts(27_648_000, 7134)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::PendingSwapOf` (r:1 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
fn cancel_swap() -> Weight {
// Proof Size summary in bytes:
// Measured: `488`
// Estimated: `4062`
// Minimum execution time: 27_430_000 picoseconds.
Weight::from_parts(28_020_000, 4062)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:2 w:2)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:1 w:2)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:2 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:2 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:4)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:2)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
fn claim_swap() -> Weight {
// Proof Size summary in bytes:
// Measured: `771`
// Estimated: `7134`
// Minimum execution time: 109_567_000 picoseconds.
Weight::from_parts(111_480_000, 7134)
.saturating_add(T::DbWeight::get().reads(9_u64))
.saturating_add(T::DbWeight::get().writes(10_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:2 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:10 w:10)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:1)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 10]`.
fn mint_pre_signed(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `580`
// Estimated: `6054 + n * (2930 ±0)`
// Minimum execution time: 159_539_000 picoseconds.
Weight::from_parts(165_962_526, 6054)
// Standard Error: 69_524
.saturating_add(Weight::from_parts(43_681_845, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(6_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(n.into()))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:10 w:10)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 10]`.
fn set_attributes_pre_signed(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `575`
// Estimated: `4062 + n * (2930 ±0)`
// Minimum execution time: 75_482_000 picoseconds.
Weight::from_parts(89_133_467, 4062)
// Standard Error: 95_313
.saturating_add(Weight::from_parts(42_327_087, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(2_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(n.into()))
}
}

View file

@ -0,0 +1,449 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_payment_streams`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.compact.compressed.wasm
// --pallet
// pallet_payment_streams
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/stagenet/src/weights/pallet_payment_streams.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_payment_streams`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_payment_streams::weights::WeightInfo for WeightInfo<T> {
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn create_fixed_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `523`
// Estimated: `6054`
// Minimum execution time: 109_755_000 picoseconds.
Weight::from_parts(111_256_000, 6054)
.saturating_add(T::DbWeight::get().reads(11_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
fn update_fixed_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1427`
// Estimated: `12414`
// Minimum execution time: 410_091_000 picoseconds.
Weight::from_parts(423_942_000, 12414)
.saturating_add(T::DbWeight::get().reads(21_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn delete_fixed_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1304`
// Estimated: `12414`
// Minimum execution time: 299_884_000 picoseconds.
Weight::from_parts(304_140_000, 12414)
.saturating_add(T::DbWeight::get().reads(22_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::AccumulatedPriceIndex` (r:1 w:0)
/// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
fn create_dynamic_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `525`
// Estimated: `6054`
// Minimum execution time: 111_177_000 picoseconds.
Weight::from_parts(113_406_000, 6054)
.saturating_add(T::DbWeight::get().reads(12_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
fn update_dynamic_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1387`
// Estimated: `12414`
// Minimum execution time: 367_704_000 picoseconds.
Weight::from_parts(372_410_000, 12414)
.saturating_add(T::DbWeight::get().reads(21_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn delete_dynamic_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1455`
// Estimated: `12414`
// Minimum execution time: 408_008_000 picoseconds.
Weight::from_parts(420_144_000, 12414)
.saturating_add(T::DbWeight::get().reads(22_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn charge_payment_streams() -> Weight {
// Proof Size summary in bytes:
// Measured: `1441`
// Estimated: `12414`
// Minimum execution time: 341_010_000 picoseconds.
Weight::from_parts(353_585_000, 12414)
.saturating_add(T::DbWeight::get().reads(21_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:10 w:10)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:10 w:10)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:10 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:12 w:12)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 10]`.
fn charge_multiple_users_payment_streams(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1122 + n * (331 ±0)`
// Estimated: `12414 + n * (2604 ±0)`
// Minimum execution time: 20_290_000 picoseconds.
Weight::from_parts(44_658_677, 12414)
// Standard Error: 159_356
.saturating_add(Weight::from_parts(299_090_828, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(12_u64))
.saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(1_u64))
.saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2604).saturating_mul(n.into()))
}
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1001 w:1001)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:999 w:999)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:999 w:999)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:999 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:999 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:999 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// The range of component `n` is `[1, 1000]`.
fn pay_outstanding_debt(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1422 + n * (644 ±0)`
// Estimated: `12414 + n * (3634 ±0)`
// Minimum execution time: 382_387_000 picoseconds.
Weight::from_parts(386_938_000, 12414)
// Standard Error: 160_843
.saturating_add(Weight::from_parts(288_094_697, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(11_u64))
.saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(4_u64))
.saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 3634).saturating_mul(n.into()))
}
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:1)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:0)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn clear_insolvent_flag() -> Weight {
// Proof Size summary in bytes:
// Measured: `231`
// Estimated: `3505`
// Minimum execution time: 22_156_000 picoseconds.
Weight::from_parts(23_278_000, 3505)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::AccumulatedPriceIndex` (r:1 w:1)
/// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
fn price_index_update() -> Weight {
// Proof Size summary in bytes:
// Measured: `116`
// Estimated: `1501`
// Minimum execution time: 5_701_000 picoseconds.
Weight::from_parts(6_021_000, 1501)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:1)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn tick_update() -> Weight {
// Proof Size summary in bytes:
// Measured: `114`
// Estimated: `1489`
// Minimum execution time: 3_827_000 picoseconds.
Weight::from_parts(4_161_000, 1489)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastSubmittersTickRegistered` (r:1 w:1)
/// Proof: `PaymentStreams::LastSubmittersTickRegistered` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:1 w:0)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::AccumulatedPriceIndex` (r:1 w:0)
/// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:244 w:244)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 244]`.
fn update_providers_last_chargeable_info(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `270 + n * (32 ±0)`
// Estimated: `11295 + n * (2543 ±0)`
// Minimum execution time: 12_555_000 picoseconds.
Weight::from_parts(10_548_186, 11295)
// Standard Error: 4_805
.saturating_add(Weight::from_parts(7_024_412, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(1_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2543).saturating_mul(n.into()))
}
}

View file

@ -0,0 +1,326 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_proofs_dealer`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.compact.compressed.wasm
// --pallet
// pallet_proofs_dealer
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/stagenet/src/weights/pallet_proofs_dealer.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_proofs_dealer`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_proofs_dealer::weights::WeightInfo for WeightInfo<T> {
/// Storage: `ProofsDealer::ChallengesQueue` (r:1 w:1)
/// Proof: `ProofsDealer::ChallengesQueue` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`)
fn challenge() -> Weight {
// Proof Size summary in bytes:
// Measured: `41`
// Estimated: `4687`
// Minimum execution time: 11_702_000 picoseconds.
Weight::from_parts(12_152_000, 4687)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:2 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToChallengesSeed` (r:1 w:0)
/// Proof: `ProofsDealer::TickToChallengesSeed` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:1 w:0)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:1)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:5 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:1 w:1)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:2)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// The range of component `n` is `[1, 20]`.
fn submit_proof_no_checkpoint_challenges_key_proofs(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `2070`
// Estimated: `15270`
// Minimum execution time: 2_158_744_000 picoseconds.
Weight::from_parts(2_068_488_029, 15270)
// Standard Error: 330_919
.saturating_add(Weight::from_parts(133_424_014, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(30_u64))
.saturating_add(T::DbWeight::get().writes(9_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:0)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToChallengesSeed` (r:1 w:0)
/// Proof: `ProofsDealer::TickToChallengesSeed` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:1 w:0)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:1 w:1)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:2)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:1)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// The range of component `n` is `[21, 40]`.
fn submit_proof_with_checkpoint_challenges_key_proofs(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `2070`
// Estimated: `20676`
// Minimum execution time: 4_534_427_000 picoseconds.
Weight::from_parts(3_936_459_939, 20676)
// Standard Error: 918_274
.saturating_add(Weight::from_parts(38_816_629, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(39_u64))
.saturating_add(T::DbWeight::get().writes(11_u64))
}
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:1)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Randomness::LatestParentBlockRandomness` (r:1 w:0)
/// Proof: `Randomness::LatestParentBlockRandomness` (`max_values`: Some(1), `max_size`: Some(36), added: 531, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:1 w:0)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckForSlashableProviders` (r:1 w:1)
/// Proof: `ProofsDealer::TickToCheckForSlashableProviders` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:1001 w:2000)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1000 w:1000)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::SlashableProviders` (r:1000 w:1000)
/// Proof: `ProofsDealer::SlashableProviders` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1000 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1000 w:0)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToChallengesSeed` (r:0 w:1)
/// Proof: `ProofsDealer::TickToChallengesSeed` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 1000]`.
fn new_challenges_round(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1155 + n * (271 ±0)`
// Estimated: `6172 + n * (3634 ±0)`
// Minimum execution time: 29_919_000 picoseconds.
Weight::from_parts(30_247_000, 6172)
// Standard Error: 50_330
.saturating_add(Weight::from_parts(40_561_686, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(3_u64))
.saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 3634).saturating_mul(n.into()))
}
/// Storage: `ProofsDealer::PriorityChallengesQueue` (r:1 w:1)
/// Proof: `ProofsDealer::PriorityChallengesQueue` (`max_values`: Some(1), `max_size`: Some(3302), added: 3797, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesQueue` (r:1 w:1)
/// Proof: `ProofsDealer::ChallengesQueue` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:1)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:0 w:2)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 20]`.
fn new_checkpoint_challenge_round(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `65 + n * (32 ±0)`
// Estimated: `4787`
// Minimum execution time: 14_102_000 picoseconds.
Weight::from_parts(16_065_088, 4787)
// Standard Error: 3_474
.saturating_add(Weight::from_parts(431_594, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `ProofsDealer::PastBlocksStatus` (r:1 w:1)
/// Proof: `ProofsDealer::PastBlocksStatus` (`max_values`: Some(1), `max_size`: Some(51), added: 546, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::PastBlocksWeight` (r:1 w:0)
/// Proof: `ProofsDealer::PastBlocksWeight` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTickerPaused` (r:0 w:1)
/// Proof: `ProofsDealer::ChallengesTickerPaused` (`max_values`: Some(1), `max_size`: Some(0), added: 495, mode: `MaxEncodedLen`)
fn check_spamming_condition() -> Weight {
// Proof Size summary in bytes:
// Measured: `248`
// Estimated: `3501`
// Minimum execution time: 14_156_000 picoseconds.
Weight::from_parts(14_699_000, 3501)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `ProofsDealer::LastDeletedTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastDeletedTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn trim_valid_proof_submitters_last_ticks_constant_execution() -> Weight {
// Proof Size summary in bytes:
// Measured: `41`
// Estimated: `1489`
// Minimum execution time: 4_462_000 picoseconds.
Weight::from_parts(4_676_000, 1489)
.saturating_add(T::DbWeight::get().reads(2_u64))
}
/// Storage: `ProofsDealer::LastDeletedTick` (r:0 w:1)
/// Proof: `ProofsDealer::LastDeletedTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:0 w:1)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
fn trim_valid_proof_submitters_last_ticks_loop() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 2_654_000 picoseconds.
Weight::from_parts(2_799_000, 0)
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `ProofsDealer::PastBlocksWeight` (r:0 w:2)
/// Proof: `ProofsDealer::PastBlocksWeight` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`)
fn on_finalize() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 4_988_000 picoseconds.
Weight::from_parts(5_139_000, 0)
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:0)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:1)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
fn force_initialise_challenge_cycle() -> Weight {
// Proof Size summary in bytes:
// Measured: `552`
// Estimated: `4624`
// Minimum execution time: 45_404_000 picoseconds.
Weight::from_parts(46_675_000, 4624)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `ProofsDealer::ChallengesTickerPaused` (r:0 w:1)
/// Proof: `ProofsDealer::ChallengesTickerPaused` (`max_values`: Some(1), `max_size`: Some(0), added: 495, mode: `MaxEncodedLen`)
fn set_paused() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 7_538_000 picoseconds.
Weight::from_parts(7_804_000, 0)
.saturating_add(T::DbWeight::get().writes(1_u64))
}
}

View file

@ -0,0 +1,84 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_session`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.compact.compressed.wasm
// --pallet
// pallet_session
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/stagenet/src/weights/pallet_session.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_session`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_session::WeightInfo for WeightInfo<T> {
/// Storage: `Session::NextKeys` (r:1 w:1)
/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `Session::KeyOwner` (r:4 w:4)
/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
fn set_keys() -> Weight {
// Proof Size summary in bytes:
// Measured: `350`
// Estimated: `11240`
// Minimum execution time: 37_322_000 picoseconds.
Weight::from_parts(38_272_000, 11240)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Session::NextKeys` (r:1 w:1)
/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `Session::KeyOwner` (r:0 w:4)
/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
fn purge_keys() -> Weight {
// Proof Size summary in bytes:
// Measured: `328`
// Estimated: `3793`
// Minimum execution time: 21_685_000 picoseconds.
Weight::from_parts(22_489_000, 3793)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
}

View file

@ -0,0 +1,630 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_storage_providers`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.compact.compressed.wasm
// --pallet
// pallet_storage_providers
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/stagenet/src/weights/pallet_storage_providers.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_storage_providers`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_storage_providers::weights::WeightInfo for WeightInfo<T> {
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
fn request_msp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 90_021_000 picoseconds.
Weight::from_parts(92_670_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
fn request_bsp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 91_611_000 picoseconds.
Weight::from_parts(93_053_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Randomness::LatestOneEpochAgoRandomness` (r:1 w:0)
/// Proof: `Randomness::LatestOneEpochAgoRandomness` (`max_values`: Some(1), `max_size`: Some(36), added: 531, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:0 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:0 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn confirm_sign_up_bsp() -> Weight {
// Proof Size summary in bytes:
// Measured: `474`
// Estimated: `5628`
// Minimum execution time: 38_428_000 picoseconds.
Weight::from_parts(39_861_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Randomness::LatestOneEpochAgoRandomness` (r:1 w:0)
/// Proof: `Randomness::LatestOneEpochAgoRandomness` (`max_values`: Some(1), `max_size`: Some(36), added: 531, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:0 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:0 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:0 w:1)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn confirm_sign_up_msp() -> Weight {
// Proof Size summary in bytes:
// Measured: `487`
// Estimated: `5628`
// Minimum execution time: 54_665_000 picoseconds.
Weight::from_parts(56_343_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
fn cancel_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `507`
// Estimated: `5628`
// Minimum execution time: 65_055_000 picoseconds.
Weight::from_parts(67_002_000, 5628)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:102 w:101)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:0 w:1)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 100]`.
fn msp_sign_off(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `775 + n * (83 ±0)`
// Estimated: `8186 + n * (3598 ±0)`
// Minimum execution time: 92_437_000 picoseconds.
Weight::from_parts(92_181_442, 8186)
// Standard Error: 9_739
.saturating_add(Weight::from_parts(6_392_076, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(7_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 3598).saturating_mul(n.into()))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:0)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn bsp_sign_off() -> Weight {
// Proof Size summary in bytes:
// Measured: `720`
// Estimated: `4624`
// Minimum execution time: 93_925_000 picoseconds.
Weight::from_parts(95_582_000, 4624)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
fn change_capacity_bsp_less_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `679`
// Estimated: `4624`
// Minimum execution time: 84_814_000 picoseconds.
Weight::from_parts(86_666_000, 4624)
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
fn change_capacity_bsp_more_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `679`
// Estimated: `4624`
// Minimum execution time: 105_285_000 picoseconds.
Weight::from_parts(106_175_000, 4624)
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
fn change_capacity_msp_less_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `649`
// Estimated: `4608`
// Minimum execution time: 79_570_000 picoseconds.
Weight::from_parts(80_600_000, 4608)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
fn change_capacity_msp_more_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `649`
// Estimated: `4608`
// Minimum execution time: 99_554_000 picoseconds.
Weight::from_parts(100_542_000, 4608)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
fn add_value_prop() -> Weight {
// Proof Size summary in bytes:
// Measured: `591`
// Estimated: `4608`
// Minimum execution time: 45_279_000 picoseconds.
Weight::from_parts(45_906_000, 4608)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
fn make_value_prop_unavailable() -> Weight {
// Proof Size summary in bytes:
// Measured: `631`
// Estimated: `4608`
// Minimum execution time: 33_017_000 picoseconds.
Weight::from_parts(33_762_000, 4608)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn add_multiaddress() -> Weight {
// Proof Size summary in bytes:
// Measured: `508`
// Estimated: `4624`
// Minimum execution time: 34_075_000 picoseconds.
Weight::from_parts(35_656_000, 4624)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn remove_multiaddress() -> Weight {
// Proof Size summary in bytes:
// Measured: `1316`
// Estimated: `4624`
// Minimum execution time: 32_962_000 picoseconds.
Weight::from_parts(33_729_000, 4624)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:0 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:0 w:1)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn force_msp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 126_394_000 picoseconds.
Weight::from_parts(129_027_000, 5628)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(8_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:0 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn force_bsp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 106_273_000 picoseconds.
Weight::from_parts(108_690_000, 5628)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(8_u64))
}
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::SlashableProviders` (r:1 w:1)
/// Proof: `ProofsDealer::SlashableProviders` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
fn slash_without_awaiting_top_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `871`
// Estimated: `6172`
// Minimum execution time: 160_594_000 picoseconds.
Weight::from_parts(163_915_000, 6172)
.saturating_add(T::DbWeight::get().reads(9_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::SlashableProviders` (r:1 w:1)
/// Proof: `ProofsDealer::SlashableProviders` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:2 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::NextAvailableProviderTopUpExpirationShTick` (r:1 w:1)
/// Proof: `Providers::NextAvailableProviderTopUpExpirationShTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::ProviderTopUpExpirations` (r:1 w:1)
/// Proof: `Providers::ProviderTopUpExpirations` (`max_values`: None, `max_size`: Some(3322), added: 5797, mode: `MaxEncodedLen`)
fn slash_with_awaiting_top_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `871`
// Estimated: `6787`
// Minimum execution time: 128_483_000 picoseconds.
Weight::from_parts(129_763_000, 6787)
.saturating_add(T::DbWeight::get().reads(13_u64))
.saturating_add(T::DbWeight::get().writes(8_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::ProviderTopUpExpirations` (r:0 w:1)
/// Proof: `Providers::ProviderTopUpExpirations` (`max_values`: None, `max_size`: Some(3322), added: 5797, mode: `MaxEncodedLen`)
fn top_up_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `758`
// Estimated: `4624`
// Minimum execution time: 115_081_000 picoseconds.
Weight::from_parts(116_579_000, 4624)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::InsolventProviders` (r:2 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:1)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:1)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
fn delete_provider_bsp() -> Weight {
// Proof Size summary in bytes:
// Measured: `853`
// Estimated: `6038`
// Minimum execution time: 80_980_000 picoseconds.
Weight::from_parts(82_589_000, 6038)
.saturating_add(T::DbWeight::get().reads(12_u64))
.saturating_add(T::DbWeight::get().writes(9_u64))
}
/// Storage: `Providers::InsolventProviders` (r:1 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:22 w:21)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToBuckets` (r:21 w:20)
/// Proof: `Providers::MainStorageProviderIdsToBuckets` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:0 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 20]`.
/// The range of component `m` is `[0, 20]`.
fn delete_provider_msp(n: u32, m: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1845 + m * (54 ±0) + n * (83 ±0)`
// Estimated: `8186 + m * (2571 ±0) + n * (3598 ±0)`
// Minimum execution time: 184_369_000 picoseconds.
Weight::from_parts(77_759_231, 8186)
// Standard Error: 28_443
.saturating_add(Weight::from_parts(6_795_099, 0).saturating_mul(n.into()))
// Standard Error: 28_443
.saturating_add(Weight::from_parts(5_705_653, 0).saturating_mul(m.into()))
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(m.into())))
.saturating_add(T::DbWeight::get().writes(5_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(m.into())))
.saturating_add(Weight::from_parts(0, 2571).saturating_mul(m.into()))
.saturating_add(Weight::from_parts(0, 3598).saturating_mul(n.into()))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:0)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn stop_all_cycles() -> Weight {
// Proof Size summary in bytes:
// Measured: `549`
// Estimated: `4624`
// Minimum execution time: 27_473_000 picoseconds.
Weight::from_parts(28_240_000, 4624)
.saturating_add(T::DbWeight::get().reads(3_u64))
}
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:0 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:1)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
fn process_expired_provider_top_up_bsp() -> Weight {
// Proof Size summary in bytes:
// Measured: `1038`
// Estimated: `6172`
// Minimum execution time: 102_791_000 picoseconds.
Weight::from_parts(105_581_000, 6172)
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:0 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
fn process_expired_provider_top_up_msp() -> Weight {
// Proof Size summary in bytes:
// Measured: `775`
// Estimated: `6172`
// Minimum execution time: 83_518_000 picoseconds.
Weight::from_parts(84_579_000, 6172)
.saturating_add(T::DbWeight::get().reads(6_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
}

View file

@ -84,6 +84,7 @@ pallet-utility = { workspace = true }
pallet-whitelist = { workspace = true }
polkadot-primitives = { workspace = true }
polkadot-runtime-common = { workspace = true }
k256 = { workspace = true, optional = true }
precompile-utils = { workspace = true }
scale-info = { workspace = true, features = ["derive", "serde"] }
serde = { workspace = true, features = ["derive"] }
@ -360,6 +361,13 @@ runtime-benchmarks = [
"pallet-external-validators-rewards/runtime-benchmarks",
"pallet-external-validator-slashes/runtime-benchmarks",
"pallet-datahaven-native-transfer/runtime-benchmarks",
# StorageHub pallets
"pallet-nfts/runtime-benchmarks",
"pallet-file-system/runtime-benchmarks",
"pallet-proofs-dealer/runtime-benchmarks",
"pallet-payment-streams/runtime-benchmarks",
"pallet-storage-providers/runtime-benchmarks",
"dep:k256",
]
try-runtime = [

View file

@ -27,6 +27,7 @@ frame_benchmarking::define_benchmarks!(
// Substrate pallets
[pallet_balances, Balances]
[pallet_session, pallet_session_benchmarking::Pallet::<Runtime>]
[pallet_identity, Identity]
[pallet_im_online, ImOnline]
[pallet_multisig, Multisig]
@ -46,6 +47,13 @@ frame_benchmarking::define_benchmarks!(
// EVM pallets
[pallet_evm, EVM]
// StorageHub pallets
[pallet_nfts, Nfts]
[pallet_file_system, FileSystem]
[pallet_proofs_dealer, ProofsDealer]
[pallet_payment_streams, PaymentStreams]
[pallet_storage_providers, Providers]
// Governance pallets
[pallet_collective_technical_committee, TechnicalCommittee]
[pallet_collective_treasury_council, TreasuryCouncil]

View file

@ -91,7 +91,6 @@ use datahaven_runtime_common::{
},
time::{EpochDurationInBlocks, SessionsPerEra, DAYS, MILLISECS_PER_BLOCK},
};
use dhp_bridge::{EigenLayerMessageProcessor, NativeTokenTransferMessageProcessor};
use frame_support::{
derive_impl,
dispatch::DispatchClass,
@ -126,7 +125,7 @@ use snowbridge_core::{gwei, meth, AgentIdOf, PricingParameters, Rewards, TokenId
use snowbridge_inbound_queue_primitives::RewardLedger;
use snowbridge_outbound_queue_primitives::{
v1::{Fee, Message, SendMessage},
v2::{Command, ConstantGasMeter},
v2::ConstantGasMeter,
SendError, SendMessageFeeProvider,
};
use snowbridge_pallet_outbound_queue_v2::OnNewCommitment;
@ -387,7 +386,7 @@ impl pallet_session::Config for Runtime {
>;
type SessionHandler = <SessionKeys as OpaqueKeys>::KeyTypeIdProviders;
type Keys = SessionKeys;
type WeightInfo = pallet_session::weights::SubstrateWeight<Runtime>;
type WeightInfo = testnet_weights::pallet_session::WeightInfo<Runtime>;
}
parameter_types! {
@ -629,7 +628,7 @@ impl pallet_identity::Config for Runtime {
type PendingUsernameExpiration = PendingUsernameExpiration;
type MaxSuffixLength = MaxSuffixLength;
type MaxUsernameLength = MaxUsernameLength;
type WeightInfo = pallet_identity::weights::SubstrateWeight<Runtime>;
type WeightInfo = testnet_weights::pallet_identity::WeightInfo<Runtime>;
type UsernameDeposit = UsernameDeposit;
type UsernameGracePeriod = UsernameGracePeriod;
@ -1041,8 +1040,8 @@ impl pallet_evm_chain_id::Config for Runtime {}
// --- Snowbridge Config Constants & Parameter Types ---
parameter_types! {
// Hoodi testnet genesis hash
pub const TestnetGenesisHash: [u8; 32] = hex_literal::hex!("bbe312868b376a3001692a646dd2d7d1e4406380dfd86b98aa8a34d1557c971b");
// DataHaven testnet genesis hash
pub const TestnetGenesisHash: [u8; 32] = hex_literal::hex!("dbf403d348916fb0694485bc7f9c0d8c53fdf86664ebac019af209c090c3df99");
pub UniversalLocation: InteriorLocation = [
GlobalConsensus(ByGenesis(TestnetGenesisHash::get()))
].into();
@ -1108,47 +1107,13 @@ impl snowbridge_pallet_system_v2::Config for Runtime {
type Helper = ();
}
// Fork versions for runtime benchmarks - must match the fixtures for BLS verification to work
// The fixtures are generated with standard testnet fork versions
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const ChainForkVersions: ForkVersions = ForkVersions {
genesis: Fork {
version: hex_literal::hex!("00000000"),
epoch: 0,
},
altair: Fork {
version: hex_literal::hex!("01000000"),
epoch: 0,
},
bellatrix: Fork {
version: hex_literal::hex!("02000000"),
epoch: 0,
},
capella: Fork {
version: hex_literal::hex!("03000000"),
epoch: 0,
},
deneb: Fork {
version: hex_literal::hex!("04000000"),
epoch: 0,
},
electra: Fork {
version: hex_literal::hex!("05000000"),
epoch: 80000000000,
},
fulu: Fork {
version: hex_literal::hex!("06000000"),
epoch: 90000000000,
},
};
}
// For tests, fast-runtime and std configurations we use the mocked fork versions
// These match the fork versions used by the local Ethereum network in E2E tests
#[cfg(all(
any(feature = "std", feature = "fast-runtime", test),
not(feature = "runtime-benchmarks")
#[cfg(any(
feature = "std",
feature = "fast-runtime",
feature = "runtime-benchmarks",
test
))]
parameter_types! {
pub const ChainForkVersions: ForkVersions = ForkVersions {
@ -1278,8 +1243,8 @@ impl snowbridge_pallet_inbound_queue_v2::Config for Runtime {
type GatewayAddress = runtime_params::dynamic_params::runtime_config::EthereumGatewayAddress;
#[cfg(not(feature = "runtime-benchmarks"))]
type MessageProcessor = (
EigenLayerMessageProcessor<Runtime>,
NativeTokenTransferMessageProcessor<Runtime>,
dhp_bridge::EigenLayerMessageProcessor<Runtime>,
dhp_bridge::NativeTokenTransferMessageProcessor<Runtime>,
);
#[cfg(feature = "runtime-benchmarks")]
type MessageProcessor = NoOpMessageProcessor;
@ -1749,6 +1714,7 @@ mod tests {
use snowbridge_inbound_queue_primitives::v2::{
EthereumAsset, Message as SnowbridgeMessage, MessageProcessor, Payload as SnowPayload,
};
use snowbridge_outbound_queue_primitives::v2::Command;
use sp_core::H160;
use sp_io::TestExternalities;
use xcm_builder::GlobalConsensusConvertsFor;
@ -1950,4 +1916,95 @@ mod tests {
assert!(result.is_ok(), "Message from authorized origin should be accepted");
});
}
/// Test that the ExternalValidatorRewardsAccount is correctly derived from the pallet ID.
///
/// This verifies that `PalletId(*b"dh/evrew").into_account_truncating()` produces the
/// expected AccountId20 value, which is used in the Rewards Agent ID computation.
#[test]
fn test_external_validator_rewards_account_derivation() {
// Expected account: "modl" (4 bytes) + "dh/evrew" (8 bytes) + zeros (8 bytes) = 20 bytes
// "modl" = 0x6d6f646c
// "dh/evrew" = 0x64682f6576726577
// Result = 0x6d6f646c64682f65767265770000000000000000
let expected_account = AccountId::from(hex_literal::hex!(
"6d6f646c64682f65767265770000000000000000"
));
let actual_account = ExternalValidatorRewardsAccount::get();
assert_eq!(
actual_account, expected_account,
"ExternalValidatorRewardsAccount must be derived correctly from PalletId 'dh/evrew'"
);
}
/// Test that the Rewards Agent ID (used for Snowbridge outbound messages from the rewards pallet)
/// is correctly computed from the chain's genesis hash and the ExternalValidatorRewardsAccount.
///
/// This test verifies the value that should be set as `RewardsAgentOrigin` in runtime parameters
/// and as `rewardsMessageOrigin` in the AVS contract configuration.
///
/// The Agent ID is computed following Snowbridge's pattern for GlobalConsensus locations:
/// blake2_256(SCALE_ENCODE("GlobalConsensus", ByGenesis(genesis_hash), compact_len, "AccountKey20", account_key))
///
/// Note: Standard `AgentIdOf` doesn't support direct AccountKey20 without a Parachain junction,
/// so we compute the hash directly here.
#[test]
fn test_rewards_agent_id_computation() {
use codec::Encode;
use sp_core::H256;
use sp_io::hashing::blake2_256;
use xcm::prelude::NetworkId;
// Use the TestnetGenesisHash parameter
let genesis_hash: [u8; 32] = TestnetGenesisHash::get();
// Get the rewards pallet account (derived from PalletId "dh/evrew")
let rewards_account: [u8; 20] = ExternalValidatorRewardsAccount::get().into();
// Build the location description following Snowbridge's encoding pattern:
// ("GlobalConsensus", ByGenesis(genesis_hash), compact_len(interior), "AccountKey20", account_key)
//
// This matches the pattern in snowbridge_core::location::DescribeGlobalPrefix
// combined with DescribeTokenTerminal for AccountKey20.
// Interior description: "AccountKey20" + account_key (no length prefix for fixed arrays)
let interior: Vec<u8> = (b"AccountKey20", rewards_account).encode();
// Full encoding: "GlobalConsensus" + NetworkId::ByGenesis(genesis) + interior
let encoded: Vec<u8> = (
b"GlobalConsensus",
NetworkId::ByGenesis(genesis_hash),
interior,
)
.encode();
// Hash with blake2_256
let computed_agent_id = H256(blake2_256(&encoded));
// Expected Agent ID - this value must match RewardsAgentOrigin in runtime_params.rs
// If this test fails, update RewardsAgentOrigin to match the computed value.
let expected_agent_id = H256(hex_literal::hex!(
"d0d6dbd1ffb401ef613f00e93cd5061ecec03ae35d2f820cd6754a5b5f020215"
));
assert_eq!(
computed_agent_id,
expected_agent_id,
"Computed Rewards Agent ID must match expected value.\n\
This value should be set as:\n\
- RewardsAgentOrigin in runtime_params.rs\n\
- rewardsMessageOrigin in AVS contract config\n\
\n\
Rewards account: 0x{}\n\
Genesis hash: 0x{}\n\
Computed: {:?}\n\
Expected: {:?}",
hex::encode(rewards_account),
hex::encode(genesis_hash),
computed_agent_id,
expected_agent_id
);
}
}

View file

@ -49,10 +49,14 @@ pub mod dynamic_params {
#[codec(index = 3)]
#[allow(non_upper_case_globals)]
/// The RewardsAgentOrigin is the hash of the string "external_validators_rewards"
/// TODO: Decide which agent origin we want to use. Currently for testing it's the zero hash
/// The RewardsAgentOrigin is the Agent ID for the rewards pallet's outbound Snowbridge messages.
/// Computed as: blake2_256(SCALE_ENCODE("GlobalConsensus", ByGenesis(genesis_hash), interior))
/// where interior = SCALE_ENCODE("AccountKey20", ExternalValidatorRewardsAccount)
///
/// For testnet with genesis hash 0xdbf403d348916fb0694485bc7f9c0d8c53fdf86664ebac019af209c090c3df99
/// and rewards account 0x6d6f646c64682f65767265770000000000000000 (from PalletId "dh/evrew"):
pub static RewardsAgentOrigin: H256 = H256::from_slice(&hex!(
"c505dfb2df107d106d08bd0f1a0acd10052ca9aa078629a4ccfd0c90c6e69b65"
"d0d6dbd1ffb401ef613f00e93cd5061ecec03ae35d2f820cd6754a5b5f020215"
));
// Proportion of fees allocated to the Treasury (remainder are burned).

View file

@ -14,9 +14,13 @@
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
#[cfg(not(feature = "runtime-benchmarks"))]
use super::HAVE;
#[cfg(feature = "runtime-benchmarks")]
use super::MICROHAVE;
use super::{
AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason,
TreasuryAccount, HAVE,
TreasuryAccount,
};
use crate::configs::runtime_params::dynamic_params::runtime_config;
use crate::{
@ -24,6 +28,8 @@ use crate::{
HOURS,
};
use core::marker::PhantomData;
#[cfg(feature = "runtime-benchmarks")]
use datahaven_runtime_common::benchmarking::StorageHubBenchmarking;
use datahaven_runtime_common::time::{DAYS, MINUTES};
use frame_support::pallet_prelude::DispatchClass;
use frame_support::traits::AsEnsureOriginWithArg;
@ -33,7 +39,7 @@ use frame_support::{
weights::Weight,
};
use frame_system::pallet_prelude::BlockNumberFor;
use frame_system::{EnsureRoot, EnsureSigned};
use frame_system::EnsureSigned;
use num_bigint::BigUint;
use pallet_nfts::PalletFeatures;
use polkadot_runtime_common::prod_or_fast;
@ -68,6 +74,7 @@ pub type StorageProofsMerkleTrieLayout = LayoutV1<BlakeTwo256>;
pub type Hashing = BlakeTwo256;
/****** NFTs pallet ******/
#[cfg(not(feature = "runtime-benchmarks"))]
parameter_types! {
pub const CollectionDeposit: Balance = 100 * HAVE;
pub const ItemDeposit: Balance = 1 * HAVE;
@ -80,6 +87,19 @@ parameter_types! {
pub const MaxAttributesPerCall: u32 = 10;
pub Features: PalletFeatures = PalletFeatures::all_enabled();
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const CollectionDeposit: Balance = 100 * MICROHAVE;
pub const ItemDeposit: Balance = 1 * MICROHAVE;
pub const MetadataDepositBase: Balance = 10 * MICROHAVE;
pub const MetadataDepositPerByte: Balance = 1 * MICROHAVE;
pub const ApprovalsLimit: u32 = 20;
pub const ItemAttributesApprovalsLimit: u32 = 20;
pub const MaxTips: u32 = 10;
pub const MaxDeadlineDuration: BlockNumber = 12 * 30 * DAYS;
pub const MaxAttributesPerCall: u32 = 10;
pub Features: PalletFeatures = PalletFeatures::all_enabled();
}
impl pallet_nfts::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
@ -104,11 +124,67 @@ impl pallet_nfts::Config for Runtime {
type Features = Features;
type OffchainSignature = Signature;
type OffchainPublic = <Signature as Verify>::Signer;
type WeightInfo = pallet_nfts::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_nfts::WeightInfo<Runtime>;
type Locker = ();
#[cfg(feature = "runtime-benchmarks")]
type Helper = benchmark_helpers::NftHelper;
}
/****** ****** ****** ******/
#[cfg(feature = "runtime-benchmarks")]
pub mod benchmark_helpers {
use crate::{AccountId, Signature};
use k256::ecdsa::SigningKey;
use sp_runtime::traits::{IdentifyAccount, Verify};
use sp_runtime::MultiSignature;
const BENCH_SIGNING_KEY: [u8; 32] = [1u8; 32];
fn bench_signing_key() -> SigningKey {
SigningKey::from_bytes(&BENCH_SIGNING_KEY.into())
.expect("benchmark signing key is valid; qed")
}
/// Benchmark helper for NFTs pallet
pub struct NftHelper;
impl pallet_nfts::BenchmarkHelper<u32, u32, <Signature as Verify>::Signer, AccountId, Signature>
for NftHelper
{
fn collection(i: u16) -> u32 {
i.into()
}
fn item(i: u16) -> u32 {
i.into()
}
fn signer() -> (<Signature as Verify>::Signer, AccountId) {
let signing_key = bench_signing_key();
let verifying_key = signing_key.verifying_key();
let encoded = verifying_key.to_encoded_point(true);
let public = sp_core::ecdsa::Public::from_full(encoded.as_bytes())
.expect("encoded point is a valid compressed secp256k1 key; qed");
let public_key: <Signature as Verify>::Signer = public.into();
let account: AccountId = public_key.clone().into_account();
(public_key, account)
}
fn sign(_public: &<Signature as Verify>::Signer, message: &[u8]) -> Signature {
// Sign using Ethereum-style secp256k1 over keccak256(message).
let digest = sp_io::hashing::keccak_256(message);
let (sig, recovery_id) = bench_signing_key()
.sign_prehash_recoverable(&digest)
.expect("signing with fixed secret key never fails; qed");
let mut sig_bytes = [0u8; 65];
sig_bytes[..64].copy_from_slice(&sig.to_bytes());
sig_bytes[64] = recovery_id.to_byte();
let sig = sp_core::ecdsa::Signature::from_raw(sig_bytes);
Signature::from(MultiSignature::Ecdsa(sig))
}
}
}
/****** Relay Randomness pallet ******/
impl pallet_randomness::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
@ -151,6 +227,7 @@ impl sp_runtime::traits::BlockNumberProvider for BlockNumberGetter {
/****** ****** ****** ******/
/****** Storage Providers pallet ******/
#[cfg(not(feature = "runtime-benchmarks"))]
parameter_types! {
pub const SpMinDeposit: Balance = 100 * HAVE;
pub const BucketDeposit: Balance = 100 * HAVE;
@ -159,10 +236,47 @@ parameter_types! {
// TODO: If the next line is uncommented (which should be eventually, replacing the line above), compilation breaks (most likely because of mismatched dependency issues)
// pub const MaxBlocksForRandomness: BlockNumber = prod_or_fast!(2 * runtime_constants::time::EPOCH_DURATION_IN_SLOTS, 2 * MINUTES);
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const SpMinDeposit: Balance = StorageHubBenchmarking::SP_MIN_DEPOSIT;
pub const BucketDeposit: Balance = StorageHubBenchmarking::BUCKET_DEPOSIT;
pub const BspSignUpLockPeriod: BlockNumber = 90 * DAYS; // ~3 months
pub const MaxBlocksForRandomness: BlockNumber = prod_or_fast!(2 * HOURS, 2 * MINUTES);
// TODO: If the next line is uncommented (which should be eventually, replacing the line above), compilation breaks (most likely because of mismatched dependency issues)
// pub const MaxBlocksForRandomness: BlockNumber = prod_or_fast!(2 * runtime_constants::time::EPOCH_DURATION_IN_SLOTS, 2 * MINUTES);
}
#[cfg(feature = "runtime-benchmarks")]
pub struct StorageHubTreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
impl Get<AccountId> for StorageHubTreasuryAccount {
fn get() -> AccountId {
let account = TreasuryAccount::get();
StorageHubBenchmarking::ensure_treasury_account::<AccountId, Balance, Balances>(account)
}
}
// Benchmark helpers for Storage Providers pallet.
#[cfg(feature = "runtime-benchmarks")]
pub struct ProvidersBenchmarkHelpers;
#[cfg(feature = "runtime-benchmarks")]
impl pallet_storage_providers::benchmarking::BenchmarkHelpers<Runtime>
for ProvidersBenchmarkHelpers
{
type ProviderId = <Runtime as pallet_storage_providers::Config>::ProviderId;
fn set_accrued_failed_proofs(provider_id: Self::ProviderId, value: u32) {
pallet_proofs_dealer::SlashableProviders::<Runtime>::insert(provider_id, value);
}
fn get_accrued_failed_proofs(provider_id: Self::ProviderId) -> u32 {
pallet_proofs_dealer::SlashableProviders::<Runtime>::get(provider_id).unwrap_or(0)
}
}
impl pallet_storage_providers::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_storage_providers::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_storage_providers::WeightInfo<Runtime>;
type ProvidersRandomness = pallet_randomness::RandomnessFromOneEpochAgo<Runtime>;
type PaymentStreams = PaymentStreams;
type ProofDealer = ProofsDealer;
@ -188,7 +302,10 @@ impl pallet_storage_providers::Config for Runtime {
type ProvidersProofSubmitters = ProofsDealer;
type ReputationWeightType = u32;
type StorageHubTickGetter = ProofsDealer;
#[cfg(not(feature = "runtime-benchmarks"))]
type Treasury = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type Treasury = StorageHubTreasuryAccount;
type SpMinDeposit = SpMinDeposit;
type SpMinCapacity = ConstU64<2>;
type DepositPerData = ConstU128<2>;
@ -208,6 +325,8 @@ impl pallet_storage_providers::Config for Runtime {
type ZeroSizeBucketFixedRate = runtime_config::ZeroSizeBucketFixedRate;
type ProviderTopUpTtl = runtime_config::ProviderTopUpTtl;
type MaxExpiredItemsInBlock = ConstU32<100>;
#[cfg(feature = "runtime-benchmarks")]
type BenchmarkHelpers = ProvidersBenchmarkHelpers;
}
pub struct StorageDataUnitAndBalanceConverter;
@ -240,7 +359,7 @@ parameter_types! {
impl pallet_payment_streams::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_payment_streams::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_payment_streams::WeightInfo<Runtime>;
type NativeBalance = Balances;
type ProvidersPallet = Providers;
type RuntimeHoldReason = RuntimeHoldReason;
@ -250,7 +369,10 @@ impl pallet_payment_streams::Config for Runtime {
type BlockNumberToBalance = BlockNumberToBalance;
type ProvidersProofSubmitters = ProofsDealer;
type TreasuryCutCalculator = LinearThenPowerOfTwoTreasuryCutCalculator<Runtime, Perbill>;
#[cfg(not(feature = "runtime-benchmarks"))]
type TreasuryAccount = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type TreasuryAccount = StorageHubTreasuryAccount;
type MaxUsersToCharge = ConstU32<10>;
type BaseDeposit = ConstU128<10>;
}
@ -279,6 +401,14 @@ const MAX_CUSTOM_CHALLENGES_PER_BLOCK: u32 = 10;
const TOTAL_MAX_CHALLENGES_PER_BLOCK: u32 =
RANDOM_CHALLENGES_PER_BLOCK + MAX_CUSTOM_CHALLENGES_PER_BLOCK;
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const BenchmarkStakeToChallengePeriod: Balance =
StorageHubBenchmarking::STAKE_TO_CHALLENGE_PERIOD;
pub const BenchmarkCheckpointChallengePeriod: BlockNumber =
StorageHubBenchmarking::CHECKPOINT_CHALLENGE_PERIOD;
}
parameter_types! {
pub const RandomChallengesPerBlock: u32 = RANDOM_CHALLENGES_PER_BLOCK;
pub const MaxCustomChallengesPerBlock: u32 = MAX_CUSTOM_CHALLENGES_PER_BLOCK;
@ -293,7 +423,7 @@ parameter_types! {
impl pallet_proofs_dealer::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_proofs_dealer::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_proofs_dealer::WeightInfo<Runtime>;
type ProvidersPallet = Providers;
type NativeBalance = Balances;
type MerkleTrieHash = Hash;
@ -306,29 +436,50 @@ impl pallet_proofs_dealer::Config for Runtime {
{ shp_constants::FILE_SIZE_TO_CHALLENGES },
>;
type StakeToBlockNumber = SaturatingBalanceToBlockNumber;
#[cfg(feature = "runtime-benchmarks")]
type RandomChallengesPerBlock = ConstU32<0>;
#[cfg(not(feature = "runtime-benchmarks"))]
type RandomChallengesPerBlock = RandomChallengesPerBlock;
#[cfg(feature = "runtime-benchmarks")]
type MaxCustomChallengesPerBlock = TotalMaxChallengesPerBlock;
#[cfg(not(feature = "runtime-benchmarks"))]
type MaxCustomChallengesPerBlock = MaxCustomChallengesPerBlock;
type MaxSubmittersPerTick = MaxSubmittersPerTick;
type TargetTicksStorageOfSubmitters = TargetTicksStorageOfSubmitters;
type ChallengeHistoryLength = ChallengeHistoryLength;
type ChallengesQueueLength = ChallengesQueueLength;
#[cfg(not(feature = "runtime-benchmarks"))]
type CheckpointChallengePeriod = runtime_config::CheckpointChallengePeriod;
#[cfg(feature = "runtime-benchmarks")]
type CheckpointChallengePeriod = BenchmarkCheckpointChallengePeriod;
type ChallengesFee = ChallengesFee;
type PriorityChallengesFee = PriorityChallengesFee;
#[cfg(not(feature = "runtime-benchmarks"))]
type Treasury = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type Treasury = StorageHubTreasuryAccount;
// TODO: Once the client logic to keep track of CR randomness deadlines and execute their submissions is implemented
// AND after the chain has been live for enough time to have enough providers to avoid the commit-reveal randomness being
// gameable, the randomness provider should be CrRandomness
type RandomnessProvider = pallet_randomness::ParentBlockRandomness<Runtime>;
#[cfg(not(feature = "runtime-benchmarks"))]
type StakeToChallengePeriod = runtime_config::StakeToChallengePeriod;
#[cfg(feature = "runtime-benchmarks")]
type StakeToChallengePeriod = BenchmarkStakeToChallengePeriod;
type MinChallengePeriod = runtime_config::MinChallengePeriod;
type ChallengeTicksTolerance = ChallengeTicksTolerance;
type BlockFullnessPeriod = ChallengeTicksTolerance; // We purposely set this to `ChallengeTicksTolerance` so that spamming of the chain is evaluated for the same blocks as the tolerance BSPs are given.
type BlockFullnessHeadroom = BlockFullnessHeadroom;
type MinNotFullBlocksRatio = MinNotFullBlocksRatio;
type MaxSlashableProvidersPerTick = MaxSlashableProvidersPerTick;
type ChallengeOrigin = EnsureRoot<AccountId>;
type PriorityChallengeOrigin = EnsureRoot<AccountId>;
#[cfg(not(feature = "runtime-benchmarks"))]
type ChallengeOrigin = frame_system::EnsureRoot<AccountId>;
#[cfg(feature = "runtime-benchmarks")]
type ChallengeOrigin = EnsureSigned<AccountId>;
#[cfg(not(feature = "runtime-benchmarks"))]
type PriorityChallengeOrigin = frame_system::EnsureRoot<AccountId>;
#[cfg(feature = "runtime-benchmarks")]
type PriorityChallengeOrigin = EnsureSigned<AccountId>;
}
// Converter from the Balance type to the BlockNumber type for math.
@ -452,12 +603,24 @@ impl Get<u32> for MaxSlashableProvidersPerTick {
type ThresholdType = u32;
pub type ReplicationTargetType = u32;
#[cfg(not(feature = "runtime-benchmarks"))]
parameter_types! {
pub const BaseStorageRequestCreationDeposit: Balance = 1 * HAVE;
pub const FileDeletionRequestCreationDeposit: Balance = 1 * HAVE;
pub const FileSystemStorageRequestCreationHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::StorageRequestCreationHold);
pub const FileSystemFileDeletionRequestHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::FileDeletionRequestHold);
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const BaseStorageRequestCreationDeposit: Balance = 1 * MICROHAVE;
pub const FileDeletionRequestCreationDeposit: Balance = 1 * MICROHAVE;
pub const FileSystemStorageRequestCreationHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::StorageRequestCreationHold);
pub const FileSystemFileDeletionRequestHoldReason: RuntimeHoldReason = RuntimeHoldReason::FileSystem(pallet_file_system::HoldReason::FileDeletionRequestHold);
}
#[cfg(feature = "runtime-benchmarks")]
parameter_types! {
pub const BenchmarkBspStopStoringFilePenalty: Balance = 1 * MICROHAVE;
}
// Converts a given signed message in a EIP-191 compliant message bytes to verify.
/// EIP-191: https://eips.ethereum.org/EIPS/eip-191
@ -480,7 +643,7 @@ impl shp_traits::MessageAdapter for Eip191Adapter {
impl pallet_file_system::Config for Runtime {
type RuntimeEvent = RuntimeEvent;
type WeightInfo = pallet_file_system::weights::SubstrateWeight<Runtime>;
type WeightInfo = crate::weights::pallet_file_system::WeightInfo<Runtime>;
type Providers = Providers;
type ProofDealer = ProofsDealer;
type PaymentStreams = PaymentStreams;
@ -500,8 +663,14 @@ impl pallet_file_system::Config for Runtime {
type RuntimeHoldReason = RuntimeHoldReason;
type Nfts = Nfts;
type CollectionInspector = BucketNfts;
#[cfg(not(feature = "runtime-benchmarks"))]
type BspStopStoringFilePenalty = runtime_config::BspStopStoringFilePenalty;
#[cfg(feature = "runtime-benchmarks")]
type BspStopStoringFilePenalty = BenchmarkBspStopStoringFilePenalty;
#[cfg(not(feature = "runtime-benchmarks"))]
type TreasuryAccount = TreasuryAccount;
#[cfg(feature = "runtime-benchmarks")]
type TreasuryAccount = StorageHubTreasuryAccount;
type MaxBatchConfirmStorageRequests = ConstU32<100>;
type MaxFilePathSize = ConstU32<512u32>;
type MaxPeerIdSize = ConstU32<100>;

View file

@ -265,7 +265,7 @@ pub fn dorothy() -> AccountId {
}
pub fn ethan() -> AccountId {
AccountId::from(hex!("Ff64d3F6efE2317EE2807d2235B1ac2AA69d9E87"))
AccountId::from(hex!("Ff64d3F6efE2317EE2807d223a0Bdc4c0c49dfDB"))
}
pub fn frank() -> AccountId {

View file

@ -142,7 +142,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
// `spec_version`, and `authoring_version` are the same between Wasm and native.
// This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use
// the compatible custom types.
spec_version: 1000,
spec_version: 1100,
impl_version: 1,
apis: RUNTIME_API_VERSIONS,
transaction_version: 1,
@ -201,7 +201,7 @@ parameter_types! {
parameter_types! {
// TODO: Change ED to 1 after upgrade to Polkadot SDK stable2503
// cfr. https://github.com/paritytech/polkadot-sdk/pull/7379
pub const ExistentialDeposit: Balance = 100;
pub const ExistentialDeposit: Balance = 1;
}
/// The version information used to identify this runtime when compiled natively.
@ -972,6 +972,7 @@ impl_runtime_apis! {
use frame_system_benchmarking::Pallet as SystemBench;
impl frame_system_benchmarking::Config for Runtime {}
impl pallet_session_benchmarking::Config for Runtime {}
impl baseline::Config for Runtime {}
use frame_support::traits::WhitelistedStorageKeys;

View file

@ -35,19 +35,25 @@ pub mod pallet_babe;
pub mod pallet_balances;
pub mod pallet_beefy_mmr;
pub mod pallet_evm;
pub mod pallet_file_system;
pub mod pallet_grandpa;
pub mod pallet_randomness;
//pub mod pallet_identity;
pub mod pallet_identity;
pub mod pallet_im_online;
pub mod pallet_message_queue;
pub mod pallet_migrations;
pub mod pallet_mmr;
pub mod pallet_multisig;
pub mod pallet_nfts;
pub mod pallet_parameters;
pub mod pallet_payment_streams;
pub mod pallet_preimage;
pub mod pallet_proofs_dealer;
pub mod pallet_proxy;
pub mod pallet_randomness;
pub mod pallet_safe_mode;
pub mod pallet_scheduler;
pub mod pallet_session;
pub mod pallet_storage_providers;
pub mod pallet_sudo;
pub mod pallet_timestamp;
pub mod pallet_transaction_payment;

View file

@ -0,0 +1,5 @@
//! Weights for `pallet_file_system`.
//!
//! Generated weights should overwrite this file.
pub use pallet_file_system::weights::SubstrateWeight as WeightInfo;

View file

@ -0,0 +1,724 @@
//! Autogenerated weights for `pallet_nfts`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2025-11-14, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-testnet-runtime/datahaven_testnet_runtime.compact.compressed.wasm
// --pallet
// pallet_nfts
// --extrinsic
//
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/testnet/src/weights/pallet_nfts.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_nfts`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_nfts::WeightInfo for WeightInfo<T> {
/// Storage: `Nfts::NextCollectionId` (r:1 w:1)
/// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:0 w:1)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:1)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn create() -> Weight {
// Proof Size summary in bytes:
// Measured: `271`
// Estimated: `3537`
// Minimum execution time: 47_561_000 picoseconds.
Weight::from_parts(48_583_000, 3537)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::NextCollectionId` (r:1 w:1)
/// Proof: `Nfts::NextCollectionId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:0 w:1)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:1)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn force_create() -> Weight {
// Proof Size summary in bytes:
// Measured: `76`
// Estimated: `3537`
// Minimum execution time: 25_742_000 picoseconds.
Weight::from_parts(26_196_000, 3537)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:0)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:1)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1001 w:1000)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1000 w:1000)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionMetadataOf` (r:0 w:1)
/// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:1)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// The range of component `m` is `[0, 1000]`.
/// The range of component `c` is `[0, 1000]`.
/// The range of component `a` is `[0, 1000]`.
fn destroy(_m: u32, _c: u32, a: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `32179 + a * (366 ±0)`
// Estimated: `2523990 + a * (2930 ±0)`
// Minimum execution time: 1_304_607_000 picoseconds.
Weight::from_parts(3_891_413_864, 2523990)
// Standard Error: 30_112
.saturating_add(Weight::from_parts(7_300_422, 0).saturating_mul(a.into()))
.saturating_add(T::DbWeight::get().reads(1004_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into())))
.saturating_add(T::DbWeight::get().writes(1005_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(a.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(a.into()))
}
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
fn mint() -> Weight {
// Proof Size summary in bytes:
// Measured: `418`
// Estimated: `4062`
// Minimum execution time: 68_983_000 picoseconds.
Weight::from_parts(69_802_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
fn force_mint() -> Weight {
// Proof Size summary in bytes:
// Measured: `418`
// Estimated: `4062`
// Minimum execution time: 65_803_000 picoseconds.
Weight::from_parts(67_191_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Nfts::Attribute` (r:1 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:0)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:0 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn burn() -> Weight {
// Proof Size summary in bytes:
// Measured: `526`
// Estimated: `4062`
// Minimum execution time: 74_085_000 picoseconds.
Weight::from_parts(75_919_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:2)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `555`
// Estimated: `4062`
// Minimum execution time: 56_531_000 picoseconds.
Weight::from_parts(57_676_000, 4062)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:5000 w:5000)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// The range of component `i` is `[0, 5000]`.
fn redeposit(i: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `750 + i * (83 ±0)`
// Estimated: `3538 + i * (3072 ±0)`
// Minimum execution time: 18_545_000 picoseconds.
Weight::from_parts(18_987_000, 3538)
// Standard Error: 11_750
.saturating_add(Weight::from_parts(23_672_529, 0).saturating_mul(i.into()))
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into())))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
.saturating_add(Weight::from_parts(0, 3072).saturating_mul(i.into()))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn lock_item_transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `423`
// Estimated: `3522`
// Minimum execution time: 24_040_000 picoseconds.
Weight::from_parts(24_947_000, 3522)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn unlock_item_transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `423`
// Estimated: `3522`
// Minimum execution time: 23_941_000 picoseconds.
Weight::from_parts(24_858_000, 3522)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn lock_collection() -> Weight {
// Proof Size summary in bytes:
// Measured: `327`
// Estimated: `3538`
// Minimum execution time: 19_598_000 picoseconds.
Weight::from_parts(20_471_000, 3538)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1)
/// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:2)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn transfer_ownership() -> Weight {
// Proof Size summary in bytes:
// Measured: `524`
// Estimated: `3581`
// Minimum execution time: 35_013_000 picoseconds.
Weight::from_parts(36_104_000, 3581)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:2 w:4)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
fn set_team() -> Weight {
// Proof Size summary in bytes:
// Measured: `344`
// Estimated: `6054`
// Minimum execution time: 48_777_000 picoseconds.
Weight::from_parts(50_672_000, 6054)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionAccount` (r:0 w:2)
/// Proof: `Nfts::CollectionAccount` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn force_collection_owner() -> Weight {
// Proof Size summary in bytes:
// Measured: `298`
// Estimated: `3537`
// Minimum execution time: 20_455_000 picoseconds.
Weight::from_parts(21_229_000, 3537)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:0 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn force_collection_config() -> Weight {
// Proof Size summary in bytes:
// Measured: `276`
// Estimated: `3537`
// Minimum execution time: 16_326_000 picoseconds.
Weight::from_parts(16_897_000, 3537)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn lock_item_properties() -> Weight {
// Proof Size summary in bytes:
// Measured: `423`
// Estimated: `3522`
// Minimum execution time: 22_519_000 picoseconds.
Weight::from_parts(23_274_000, 3522)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:1)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
fn set_attribute() -> Weight {
// Proof Size summary in bytes:
// Measured: `514`
// Estimated: `3920`
// Minimum execution time: 69_247_000 picoseconds.
Weight::from_parts(70_996_000, 3920)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:1)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
fn force_set_attribute() -> Weight {
// Proof Size summary in bytes:
// Measured: `331`
// Estimated: `3920`
// Minimum execution time: 33_077_000 picoseconds.
Weight::from_parts(33_810_000, 3920)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Attribute` (r:1 w:1)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
fn clear_attribute() -> Weight {
// Proof Size summary in bytes:
// Measured: `958`
// Estimated: `3920`
// Minimum execution time: 63_523_000 picoseconds.
Weight::from_parts(64_779_000, 3920)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
fn approve_item_attributes() -> Weight {
// Proof Size summary in bytes:
// Measured: `356`
// Estimated: `4062`
// Minimum execution time: 20_686_000 picoseconds.
Weight::from_parts(21_511_000, 4062)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1001 w:1000)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 1000]`.
fn cancel_item_attributes_approval(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `769 + n * (386 ±0)`
// Estimated: `4062 + n * (2930 ±0)`
// Minimum execution time: 33_029_000 picoseconds.
Weight::from_parts(33_938_000, 4062)
// Standard Error: 3_029
.saturating_add(Weight::from_parts(7_579_917, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(2_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(n.into()))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:1)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
fn set_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `514`
// Estimated: `3800`
// Minimum execution time: 56_219_000 picoseconds.
Weight::from_parts(57_548_000, 3800)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:1)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn clear_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `824`
// Estimated: `3800`
// Minimum execution time: 53_360_000 picoseconds.
Weight::from_parts(54_827_000, 3800)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1)
/// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`)
fn set_collection_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `373`
// Estimated: `3759`
// Minimum execution time: 50_851_000 picoseconds.
Weight::from_parts(52_322_000, 3759)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionMetadataOf` (r:1 w:1)
/// Proof: `Nfts::CollectionMetadataOf` (`max_values`: None, `max_size`: Some(294), added: 2769, mode: `MaxEncodedLen`)
fn clear_collection_metadata() -> Weight {
// Proof Size summary in bytes:
// Measured: `691`
// Estimated: `3759`
// Minimum execution time: 50_304_000 picoseconds.
Weight::from_parts(51_259_000, 3759)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn approve_transfer() -> Weight {
// Proof Size summary in bytes:
// Measured: `385`
// Estimated: `4062`
// Minimum execution time: 24_516_000 picoseconds.
Weight::from_parts(25_110_000, 4062)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
fn cancel_approval() -> Weight {
// Proof Size summary in bytes:
// Measured: `382`
// Estimated: `4062`
// Minimum execution time: 20_404_000 picoseconds.
Weight::from_parts(21_281_000, 4062)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
fn clear_all_transfer_approvals() -> Weight {
// Proof Size summary in bytes:
// Measured: `382`
// Estimated: `4062`
// Minimum execution time: 19_568_000 picoseconds.
Weight::from_parts(20_376_000, 4062)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::OwnershipAcceptance` (r:1 w:1)
/// Proof: `Nfts::OwnershipAcceptance` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn set_accept_ownership() -> Weight {
// Proof Size summary in bytes:
// Measured: `76`
// Estimated: `3505`
// Minimum execution time: 17_232_000 picoseconds.
Weight::from_parts(17_555_000, 3505)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
fn set_collection_max_supply() -> Weight {
// Proof Size summary in bytes:
// Measured: `327`
// Estimated: `3538`
// Minimum execution time: 22_353_000 picoseconds.
Weight::from_parts(22_864_000, 3538)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:1 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:1)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
fn update_mint_settings() -> Weight {
// Proof Size summary in bytes:
// Measured: `311`
// Estimated: `3538`
// Minimum execution time: 21_008_000 picoseconds.
Weight::from_parts(21_821_000, 3538)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
fn set_price() -> Weight {
// Proof Size summary in bytes:
// Measured: `493`
// Estimated: `4062`
// Minimum execution time: 30_820_000 picoseconds.
Weight::from_parts(31_676_000, 4062)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:1 w:1)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:1 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:2)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn buy_item() -> Weight {
// Proof Size summary in bytes:
// Measured: `655`
// Estimated: `4062`
// Minimum execution time: 67_391_000 picoseconds.
Weight::from_parts(69_020_000, 4062)
.saturating_add(T::DbWeight::get().reads(6_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// The range of component `n` is `[0, 10]`.
fn pay_tips(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 3_194_000 picoseconds.
Weight::from_parts(4_693_046, 0)
// Standard Error: 8_482
.saturating_add(Weight::from_parts(2_570_624, 0).saturating_mul(n.into()))
}
/// Storage: `Nfts::Item` (r:2 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:0 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
fn create_swap() -> Weight {
// Proof Size summary in bytes:
// Measured: `444`
// Estimated: `7134`
// Minimum execution time: 26_668_000 picoseconds.
Weight::from_parts(27_700_000, 7134)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::PendingSwapOf` (r:1 w:1)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
fn cancel_swap() -> Weight {
// Proof Size summary in bytes:
// Measured: `488`
// Estimated: `4062`
// Minimum execution time: 27_612_000 picoseconds.
Weight::from_parts(28_523_000, 4062)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Nfts::Item` (r:2 w:2)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::PendingSwapOf` (r:1 w:2)
/// Proof: `Nfts::PendingSwapOf` (`max_values`: None, `max_size`: Some(71), added: 2546, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:0)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:2 w:0)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:2 w:0)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:4)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemPriceOf` (r:0 w:2)
/// Proof: `Nfts::ItemPriceOf` (`max_values`: None, `max_size`: Some(77), added: 2552, mode: `MaxEncodedLen`)
fn claim_swap() -> Weight {
// Proof Size summary in bytes:
// Measured: `771`
// Estimated: `7134`
// Minimum execution time: 109_691_000 picoseconds.
Weight::from_parts(111_678_000, 7134)
.saturating_add(T::DbWeight::get().reads(9_u64))
.saturating_add(T::DbWeight::get().writes(10_u64))
}
/// Storage: `Nfts::CollectionRoleOf` (r:2 w:0)
/// Proof: `Nfts::CollectionRoleOf` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Item` (r:1 w:1)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemConfigOf` (r:1 w:1)
/// Proof: `Nfts::ItemConfigOf` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:10 w:10)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemMetadataOf` (r:1 w:1)
/// Proof: `Nfts::ItemMetadataOf` (`max_values`: None, `max_size`: Some(335), added: 2810, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Account` (r:0 w:1)
/// Proof: `Nfts::Account` (`max_values`: None, `max_size`: Some(76), added: 2551, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 10]`.
fn mint_pre_signed(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `580`
// Estimated: `6054 + n * (2930 ±0)`
// Minimum execution time: 158_638_000 picoseconds.
Weight::from_parts(165_550_686, 6054)
// Standard Error: 65_710
.saturating_add(Weight::from_parts(43_677_181, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(6_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(n.into()))
}
/// Storage: `Nfts::Item` (r:1 w:0)
/// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`)
/// Storage: `Nfts::ItemAttributesApprovalsOf` (r:1 w:1)
/// Proof: `Nfts::ItemAttributesApprovalsOf` (`max_values`: None, `max_size`: Some(441), added: 2916, mode: `MaxEncodedLen`)
/// Storage: `Nfts::CollectionConfigOf` (r:1 w:0)
/// Proof: `Nfts::CollectionConfigOf` (`max_values`: None, `max_size`: Some(73), added: 2548, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Collection` (r:1 w:1)
/// Proof: `Nfts::Collection` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`)
/// Storage: `Nfts::Attribute` (r:10 w:10)
/// Proof: `Nfts::Attribute` (`max_values`: None, `max_size`: Some(455), added: 2930, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 10]`.
fn set_attributes_pre_signed(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `575`
// Estimated: `4062 + n * (2930 ±0)`
// Minimum execution time: 75_427_000 picoseconds.
Weight::from_parts(88_971_257, 4062)
// Standard Error: 91_158
.saturating_add(Weight::from_parts(42_253_239, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(2_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2930).saturating_mul(n.into()))
}
}

View file

@ -0,0 +1,449 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_payment_streams`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-testnet-runtime/datahaven_testnet_runtime.compact.compressed.wasm
// --pallet
// pallet_payment_streams
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/testnet/src/weights/pallet_payment_streams.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_payment_streams`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_payment_streams::weights::WeightInfo for WeightInfo<T> {
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn create_fixed_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `523`
// Estimated: `6054`
// Minimum execution time: 108_671_000 picoseconds.
Weight::from_parts(110_483_000, 6054)
.saturating_add(T::DbWeight::get().reads(11_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
fn update_fixed_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1427`
// Estimated: `12414`
// Minimum execution time: 406_731_000 picoseconds.
Weight::from_parts(416_205_000, 12414)
.saturating_add(T::DbWeight::get().reads(21_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn delete_fixed_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1304`
// Estimated: `12414`
// Minimum execution time: 294_818_000 picoseconds.
Weight::from_parts(298_194_000, 12414)
.saturating_add(T::DbWeight::get().reads(22_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::AccumulatedPriceIndex` (r:1 w:0)
/// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
fn create_dynamic_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `525`
// Estimated: `6054`
// Minimum execution time: 110_206_000 picoseconds.
Weight::from_parts(112_480_000, 6054)
.saturating_add(T::DbWeight::get().reads(12_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
fn update_dynamic_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1387`
// Estimated: `12414`
// Minimum execution time: 350_407_000 picoseconds.
Weight::from_parts(353_687_000, 12414)
.saturating_add(T::DbWeight::get().reads(21_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn delete_dynamic_rate_payment_stream() -> Weight {
// Proof Size summary in bytes:
// Measured: `1455`
// Estimated: `12414`
// Minimum execution time: 407_867_000 picoseconds.
Weight::from_parts(423_394_000, 12414)
.saturating_add(T::DbWeight::get().reads(22_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:3 w:3)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn charge_payment_streams() -> Weight {
// Proof Size summary in bytes:
// Measured: `1441`
// Estimated: `12414`
// Minimum execution time: 337_670_000 picoseconds.
Weight::from_parts(343_494_000, 12414)
.saturating_add(T::DbWeight::get().reads(21_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:10 w:10)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:10 w:10)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:10 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:12 w:12)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 10]`.
fn charge_multiple_users_payment_streams(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1122 + n * (331 ±0)`
// Estimated: `12414 + n * (2604 ±0)`
// Minimum execution time: 20_398_000 picoseconds.
Weight::from_parts(45_361_517, 12414)
// Standard Error: 164_730
.saturating_add(Weight::from_parts(296_339_119, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(12_u64))
.saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(1_u64))
.saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2604).saturating_mul(n.into()))
}
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1001 w:1001)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:0)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:999 w:999)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:999 w:999)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:999 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:999 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:4 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:999 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:1)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// The range of component `n` is `[1, 1000]`.
fn pay_outstanding_debt(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1422 + n * (644 ±0)`
// Estimated: `12414 + n * (3634 ±0)`
// Minimum execution time: 379_144_000 picoseconds.
Weight::from_parts(384_440_000, 12414)
// Standard Error: 164_472
.saturating_add(Weight::from_parts(287_945_137, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(11_u64))
.saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(4_u64))
.saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 3634).saturating_mul(n.into()))
}
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:1)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::RegisteredUsers` (r:1 w:0)
/// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
fn clear_insolvent_flag() -> Weight {
// Proof Size summary in bytes:
// Measured: `231`
// Estimated: `3505`
// Minimum execution time: 22_622_000 picoseconds.
Weight::from_parts(23_508_000, 3505)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::AccumulatedPriceIndex` (r:1 w:1)
/// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
fn price_index_update() -> Weight {
// Proof Size summary in bytes:
// Measured: `116`
// Estimated: `1501`
// Minimum execution time: 5_924_000 picoseconds.
Weight::from_parts(6_148_000, 1501)
.saturating_add(T::DbWeight::get().reads(2_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `PaymentStreams::OnPollTicker` (r:1 w:1)
/// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn tick_update() -> Weight {
// Proof Size summary in bytes:
// Measured: `114`
// Estimated: `1489`
// Minimum execution time: 4_037_000 picoseconds.
Weight::from_parts(4_180_000, 1489)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastSubmittersTickRegistered` (r:1 w:1)
/// Proof: `PaymentStreams::LastSubmittersTickRegistered` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:1 w:0)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::AccumulatedPriceIndex` (r:1 w:0)
/// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:244 w:244)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 244]`.
fn update_providers_last_chargeable_info(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `270 + n * (32 ±0)`
// Estimated: `11295 + n * (2543 ±0)`
// Minimum execution time: 12_833_000 picoseconds.
Weight::from_parts(14_336_361, 11295)
// Standard Error: 5_031
.saturating_add(Weight::from_parts(6_893_894, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(1_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 2543).saturating_mul(n.into()))
}
}

View file

@ -0,0 +1,326 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_proofs_dealer`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-testnet-runtime/datahaven_testnet_runtime.compact.compressed.wasm
// --pallet
// pallet_proofs_dealer
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/testnet/src/weights/pallet_proofs_dealer.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_proofs_dealer`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_proofs_dealer::weights::WeightInfo for WeightInfo<T> {
/// Storage: `ProofsDealer::ChallengesQueue` (r:1 w:1)
/// Proof: `ProofsDealer::ChallengesQueue` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`)
fn challenge() -> Weight {
// Proof Size summary in bytes:
// Measured: `41`
// Estimated: `4687`
// Minimum execution time: 11_486_000 picoseconds.
Weight::from_parts(11_900_000, 4687)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:2 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToChallengesSeed` (r:1 w:0)
/// Proof: `ProofsDealer::TickToChallengesSeed` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:1 w:0)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:1)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:5 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:1 w:1)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:2)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// The range of component `n` is `[1, 20]`.
fn submit_proof_no_checkpoint_challenges_key_proofs(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `2070`
// Estimated: `15270`
// Minimum execution time: 2_174_837_000 picoseconds.
Weight::from_parts(2_059_384_726, 15270)
// Standard Error: 314_390
.saturating_add(Weight::from_parts(135_797_182, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(30_u64))
.saturating_add(T::DbWeight::get().writes(9_u64))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:0)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToChallengesSeed` (r:1 w:0)
/// Proof: `ProofsDealer::TickToChallengesSeed` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:1 w:0)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:1 w:1)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:2)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:1)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0)
/// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:2 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0)
/// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:0)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (r:1 w:0)
/// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`)
/// The range of component `n` is `[21, 40]`.
fn submit_proof_with_checkpoint_challenges_key_proofs(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `2070`
// Estimated: `20676`
// Minimum execution time: 4_570_889_000 picoseconds.
Weight::from_parts(4_000_730_198, 20676)
// Standard Error: 951_176
.saturating_add(Weight::from_parts(35_912_979, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(39_u64))
.saturating_add(T::DbWeight::get().writes(11_u64))
}
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:1)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Randomness::LatestParentBlockRandomness` (r:1 w:0)
/// Proof: `Randomness::LatestParentBlockRandomness` (`max_values`: Some(1), `max_size`: Some(36), added: 531, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:1 w:0)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckForSlashableProviders` (r:1 w:1)
/// Proof: `ProofsDealer::TickToCheckForSlashableProviders` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:1001 w:2000)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1000 w:1000)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::SlashableProviders` (r:1000 w:1000)
/// Proof: `ProofsDealer::SlashableProviders` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1000 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1000 w:0)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToChallengesSeed` (r:0 w:1)
/// Proof: `ProofsDealer::TickToChallengesSeed` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 1000]`.
fn new_challenges_round(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1155 + n * (271 ±0)`
// Estimated: `6172 + n * (3634 ±0)`
// Minimum execution time: 29_687_000 picoseconds.
Weight::from_parts(30_010_000, 6172)
// Standard Error: 49_079
.saturating_add(Weight::from_parts(40_156_766, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(3_u64))
.saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 3634).saturating_mul(n.into()))
}
/// Storage: `ProofsDealer::PriorityChallengesQueue` (r:1 w:1)
/// Proof: `ProofsDealer::PriorityChallengesQueue` (`max_values`: Some(1), `max_size`: Some(3302), added: 3797, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesQueue` (r:1 w:1)
/// Proof: `ProofsDealer::ChallengesQueue` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::LastCheckpointTick` (r:1 w:1)
/// Proof: `ProofsDealer::LastCheckpointTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToCheckpointChallenges` (r:0 w:2)
/// Proof: `ProofsDealer::TickToCheckpointChallenges` (`max_values`: None, `max_size`: Some(681), added: 3156, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 20]`.
fn new_checkpoint_challenge_round(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `65 + n * (32 ±0)`
// Estimated: `4787`
// Minimum execution time: 14_023_000 picoseconds.
Weight::from_parts(16_003_551, 4787)
// Standard Error: 3_466
.saturating_add(Weight::from_parts(429_621, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `ProofsDealer::PastBlocksStatus` (r:1 w:1)
/// Proof: `ProofsDealer::PastBlocksStatus` (`max_values`: Some(1), `max_size`: Some(51), added: 546, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::PastBlocksWeight` (r:1 w:0)
/// Proof: `ProofsDealer::PastBlocksWeight` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTickerPaused` (r:0 w:1)
/// Proof: `ProofsDealer::ChallengesTickerPaused` (`max_values`: Some(1), `max_size`: Some(0), added: 495, mode: `MaxEncodedLen`)
fn check_spamming_condition() -> Weight {
// Proof Size summary in bytes:
// Measured: `248`
// Estimated: `3501`
// Minimum execution time: 13_925_000 picoseconds.
Weight::from_parts(14_476_000, 3501)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `ProofsDealer::LastDeletedTick` (r:1 w:0)
/// Proof: `ProofsDealer::LastDeletedTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn trim_valid_proof_submitters_last_ticks_constant_execution() -> Weight {
// Proof Size summary in bytes:
// Measured: `41`
// Estimated: `1489`
// Minimum execution time: 4_422_000 picoseconds.
Weight::from_parts(4_638_000, 1489)
.saturating_add(T::DbWeight::get().reads(2_u64))
}
/// Storage: `ProofsDealer::LastDeletedTick` (r:0 w:1)
/// Proof: `ProofsDealer::LastDeletedTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ValidProofSubmittersLastTicks` (r:0 w:1)
/// Proof: `ProofsDealer::ValidProofSubmittersLastTicks` (`max_values`: None, `max_size`: Some(7830), added: 10305, mode: `MaxEncodedLen`)
fn trim_valid_proof_submitters_last_ticks_loop() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 2_453_000 picoseconds.
Weight::from_parts(2_608_000, 0)
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `ProofsDealer::PastBlocksWeight` (r:0 w:2)
/// Proof: `ProofsDealer::PastBlocksWeight` (`max_values`: None, `max_size`: Some(36), added: 2511, mode: `MaxEncodedLen`)
fn on_finalize() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 4_835_000 picoseconds.
Weight::from_parts(5_018_000, 0)
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:0)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:1)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
fn force_initialise_challenge_cycle() -> Weight {
// Proof Size summary in bytes:
// Measured: `552`
// Estimated: `4624`
// Minimum execution time: 44_075_000 picoseconds.
Weight::from_parts(45_401_000, 4624)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `ProofsDealer::ChallengesTickerPaused` (r:0 w:1)
/// Proof: `ProofsDealer::ChallengesTickerPaused` (`max_values`: Some(1), `max_size`: Some(0), added: 495, mode: `MaxEncodedLen`)
fn set_paused() -> Weight {
// Proof Size summary in bytes:
// Measured: `0`
// Estimated: `0`
// Minimum execution time: 7_190_000 picoseconds.
Weight::from_parts(7_572_000, 0)
.saturating_add(T::DbWeight::get().writes(1_u64))
}
}

View file

@ -0,0 +1,84 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_session`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-testnet-runtime/datahaven_testnet_runtime.compact.compressed.wasm
// --pallet
// pallet_session
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/testnet/src/weights/pallet_session.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_session`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_session::WeightInfo for WeightInfo<T> {
/// Storage: `Session::NextKeys` (r:1 w:1)
/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `Session::KeyOwner` (r:4 w:4)
/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
fn set_keys() -> Weight {
// Proof Size summary in bytes:
// Measured: `350`
// Estimated: `11240`
// Minimum execution time: 37_208_000 picoseconds.
Weight::from_parts(38_300_000, 11240)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Session::NextKeys` (r:1 w:1)
/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
/// Storage: `Session::KeyOwner` (r:0 w:4)
/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
fn purge_keys() -> Weight {
// Proof Size summary in bytes:
// Measured: `328`
// Estimated: `3793`
// Minimum execution time: 21_720_000 picoseconds.
Weight::from_parts(22_535_000, 3793)
.saturating_add(T::DbWeight::get().reads(1_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
}

View file

@ -0,0 +1,630 @@
// Copyright 2025 DataHaven
// This file is part of DataHaven.
// DataHaven is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// DataHaven is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with DataHaven. If not, see <http://www.gnu.org/licenses/>.
//! Autogenerated weights for `pallet_storage_providers`
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0
//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! WORST CASE MAP SIZE: `1000000`
//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz`
//! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
// Executed Command:
// frame-omni-bencher
// v1
// benchmark
// pallet
// --runtime
// target/production/wbuild/datahaven-testnet-runtime/datahaven_testnet_runtime.compact.compressed.wasm
// --pallet
// pallet_storage_providers
// --extrinsic
//
// --header
// ../file_header.txt
// --template
// benchmarking/frame-weight-template.hbs
// --output
// runtime/testnet/src/weights/pallet_storage_providers.rs
// --steps
// 50
// --repeat
// 20
#![cfg_attr(rustfmt, rustfmt_skip)]
#![allow(unused_parens)]
#![allow(unused_imports)]
use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
use sp_std::marker::PhantomData;
/// Weights for `pallet_storage_providers`.
pub struct WeightInfo<T>(PhantomData<T>);
impl<T: frame_system::Config> pallet_storage_providers::weights::WeightInfo for WeightInfo<T> {
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
fn request_msp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 89_826_000 picoseconds.
Weight::from_parts(90_994_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
fn request_bsp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 89_741_000 picoseconds.
Weight::from_parts(91_222_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Randomness::LatestOneEpochAgoRandomness` (r:1 w:0)
/// Proof: `Randomness::LatestOneEpochAgoRandomness` (`max_values`: Some(1), `max_size`: Some(36), added: 531, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:0 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:0 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn confirm_sign_up_bsp() -> Weight {
// Proof Size summary in bytes:
// Measured: `474`
// Estimated: `5628`
// Minimum execution time: 38_182_000 picoseconds.
Weight::from_parts(39_713_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Randomness::LatestOneEpochAgoRandomness` (r:1 w:0)
/// Proof: `Randomness::LatestOneEpochAgoRandomness` (`max_values`: Some(1), `max_size`: Some(36), added: 531, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:0 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:0 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:0 w:1)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn confirm_sign_up_msp() -> Weight {
// Proof Size summary in bytes:
// Measured: `487`
// Estimated: `5628`
// Minimum execution time: 54_783_000 picoseconds.
Weight::from_parts(56_744_000, 5628)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(6_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
fn cancel_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `507`
// Estimated: `5628`
// Minimum execution time: 65_446_000 picoseconds.
Weight::from_parts(66_906_000, 5628)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:102 w:101)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:0 w:1)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 100]`.
fn msp_sign_off(n: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `775 + n * (83 ±0)`
// Estimated: `8186 + n * (3598 ±0)`
// Minimum execution time: 93_251_000 picoseconds.
Weight::from_parts(91_955_675, 8186)
// Standard Error: 9_290
.saturating_add(Weight::from_parts(6_491_321, 0).saturating_mul(n.into()))
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes(7_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(Weight::from_parts(0, 3598).saturating_mul(n.into()))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:0)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
fn bsp_sign_off() -> Weight {
// Proof Size summary in bytes:
// Measured: `720`
// Estimated: `4624`
// Minimum execution time: 93_040_000 picoseconds.
Weight::from_parts(95_240_000, 4624)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
fn change_capacity_bsp_less_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `679`
// Estimated: `4624`
// Minimum execution time: 83_405_000 picoseconds.
Weight::from_parts(85_132_000, 4624)
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
fn change_capacity_bsp_more_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `679`
// Estimated: `4624`
// Minimum execution time: 105_733_000 picoseconds.
Weight::from_parts(106_832_000, 4624)
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().writes(4_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
fn change_capacity_msp_less_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `649`
// Estimated: `4608`
// Minimum execution time: 79_140_000 picoseconds.
Weight::from_parts(80_429_000, 4608)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
fn change_capacity_msp_more_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `649`
// Estimated: `4608`
// Minimum execution time: 98_935_000 picoseconds.
Weight::from_parts(100_250_000, 4608)
.saturating_add(T::DbWeight::get().reads(5_u64))
.saturating_add(T::DbWeight::get().writes(3_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
fn add_value_prop() -> Weight {
// Proof Size summary in bytes:
// Measured: `591`
// Estimated: `4608`
// Minimum execution time: 44_674_000 picoseconds.
Weight::from_parts(46_159_000, 4608)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(2_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
fn make_value_prop_unavailable() -> Weight {
// Proof Size summary in bytes:
// Measured: `631`
// Estimated: `4608`
// Minimum execution time: 32_741_000 picoseconds.
Weight::from_parts(34_206_000, 4608)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn add_multiaddress() -> Weight {
// Proof Size summary in bytes:
// Measured: `508`
// Estimated: `4624`
// Minimum execution time: 34_779_000 picoseconds.
Weight::from_parts(35_785_000, 4624)
.saturating_add(T::DbWeight::get().reads(4_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn remove_multiaddress() -> Weight {
// Proof Size summary in bytes:
// Measured: `1316`
// Estimated: `4624`
// Minimum execution time: 32_789_000 picoseconds.
Weight::from_parts(33_844_000, 4624)
.saturating_add(T::DbWeight::get().reads(3_u64))
.saturating_add(T::DbWeight::get().writes(1_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:1 w:1)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:0 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::PrivilegedProviders` (r:0 w:1)
/// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
fn force_msp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 126_228_000 picoseconds.
Weight::from_parts(130_217_000, 5628)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(8_u64))
}
/// Storage: `Providers::SignUpRequests` (r:1 w:1)
/// Proof: `Providers::SignUpRequests` (`max_values`: None, `max_size`: Some(2163), added: 4638, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:0 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
fn force_bsp_sign_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `270`
// Estimated: `5628`
// Minimum execution time: 106_118_000 picoseconds.
Weight::from_parts(107_693_000, 5628)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(8_u64))
}
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::SlashableProviders` (r:1 w:1)
/// Proof: `ProofsDealer::SlashableProviders` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:1 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:0)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
fn slash_without_awaiting_top_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `871`
// Estimated: `6172`
// Minimum execution time: 162_133_000 picoseconds.
Weight::from_parts(164_580_000, 6172)
.saturating_add(T::DbWeight::get().reads(9_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::SlashableProviders` (r:1 w:1)
/// Proof: `ProofsDealer::SlashableProviders` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`)
/// Storage: `Parameters::Parameters` (r:2 w:0)
/// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:0)
/// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::NextAvailableProviderTopUpExpirationShTick` (r:1 w:1)
/// Proof: `Providers::NextAvailableProviderTopUpExpirationShTick` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::ProviderTopUpExpirations` (r:1 w:1)
/// Proof: `Providers::ProviderTopUpExpirations` (`max_values`: None, `max_size`: Some(3322), added: 5797, mode: `MaxEncodedLen`)
fn slash_with_awaiting_top_up() -> Weight {
// Proof Size summary in bytes:
// Measured: `871`
// Estimated: `6787`
// Minimum execution time: 128_623_000 picoseconds.
Weight::from_parts(130_891_000, 6787)
.saturating_add(T::DbWeight::get().reads(13_u64))
.saturating_add(T::DbWeight::get().writes(8_u64))
}
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:1 w:0)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:1 w:1)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::ProviderTopUpExpirations` (r:0 w:1)
/// Proof: `Providers::ProviderTopUpExpirations` (`max_values`: None, `max_size`: Some(3322), added: 5797, mode: `MaxEncodedLen`)
fn top_up_deposit() -> Weight {
// Proof Size summary in bytes:
// Measured: `758`
// Estimated: `4624`
// Minimum execution time: 113_271_000 picoseconds.
Weight::from_parts(115_045_000, 4624)
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
/// Storage: `Providers::InsolventProviders` (r:2 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:1)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:1)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Providers::BspCount` (r:1 w:1)
/// Proof: `Providers::BspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::TotalBspsCapacity` (r:1 w:1)
/// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::UsedBspsCapacity` (r:1 w:1)
/// Proof: `Providers::UsedBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
/// Storage: `Providers::GlobalBspsReputationWeight` (r:1 w:1)
/// Proof: `Providers::GlobalBspsReputationWeight` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:1)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
fn delete_provider_bsp() -> Weight {
// Proof Size summary in bytes:
// Measured: `853`
// Estimated: `6038`
// Minimum execution time: 81_453_000 picoseconds.
Weight::from_parts(84_499_000, 6038)
.saturating_add(T::DbWeight::get().reads(12_u64))
.saturating_add(T::DbWeight::get().writes(9_u64))
}
/// Storage: `Providers::InsolventProviders` (r:1 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`)
/// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0)
/// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:1)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToValuePropositions` (r:22 w:21)
/// Proof: `Providers::MainStorageProviderIdsToValuePropositions` (`max_values`: None, `max_size`: Some(1123), added: 3598, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviderIdsToBuckets` (r:21 w:20)
/// Proof: `Providers::MainStorageProviderIdsToBuckets` (`max_values`: None, `max_size`: Some(96), added: 2571, mode: `MaxEncodedLen`)
/// Storage: `Providers::MspCount` (r:1 w:1)
/// Proof: `Providers::MspCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToMainStorageProviderId` (r:0 w:1)
/// Proof: `Providers::AccountIdToMainStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// The range of component `n` is `[0, 20]`.
/// The range of component `m` is `[0, 20]`.
fn delete_provider_msp(n: u32, m: u32, ) -> Weight {
// Proof Size summary in bytes:
// Measured: `1845 + m * (54 ±0) + n * (83 ±0)`
// Estimated: `8186 + m * (2571 ±0) + n * (3598 ±0)`
// Minimum execution time: 186_516_000 picoseconds.
Weight::from_parts(80_100_317, 8186)
// Standard Error: 31_923
.saturating_add(Weight::from_parts(6_927_784, 0).saturating_mul(n.into()))
// Standard Error: 31_923
.saturating_add(Weight::from_parts(5_691_747, 0).saturating_mul(m.into()))
.saturating_add(T::DbWeight::get().reads(8_u64))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(m.into())))
.saturating_add(T::DbWeight::get().writes(5_u64))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(n.into())))
.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(m.into())))
.saturating_add(Weight::from_parts(0, 2571).saturating_mul(m.into()))
.saturating_add(Weight::from_parts(0, 3598).saturating_mul(n.into()))
}
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:0)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
fn stop_all_cycles() -> Weight {
// Proof Size summary in bytes:
// Measured: `549`
// Estimated: `4624`
// Minimum execution time: 27_371_000 picoseconds.
Weight::from_parts(28_106_000, 4624)
.saturating_add(T::DbWeight::get().reads(3_u64))
}
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0)
/// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::ProviderToProofSubmissionRecord` (r:1 w:1)
/// Proof: `ProofsDealer::ProviderToProofSubmissionRecord` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:0 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
/// Storage: `ProofsDealer::TickToProvidersDeadlines` (r:0 w:1)
/// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`)
fn process_expired_provider_top_up_bsp() -> Weight {
// Proof Size summary in bytes:
// Measured: `1038`
// Estimated: `6172`
// Minimum execution time: 103_589_000 picoseconds.
Weight::from_parts(106_013_000, 6172)
.saturating_add(T::DbWeight::get().reads(7_u64))
.saturating_add(T::DbWeight::get().writes(7_u64))
}
/// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1)
/// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`)
/// Storage: `Providers::BackupStorageProviders` (r:1 w:0)
/// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`)
/// Storage: `Providers::MainStorageProviders` (r:1 w:0)
/// Proof: `Providers::MainStorageProviders` (`max_values`: None, `max_size`: Some(1143), added: 3618, mode: `MaxEncodedLen`)
/// Storage: `Balances::Holds` (r:1 w:1)
/// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`)
/// Storage: `System::Account` (r:2 w:2)
/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`)
/// Storage: `Providers::InsolventProviders` (r:0 w:1)
/// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`)
fn process_expired_provider_top_up_msp() -> Weight {
// Proof Size summary in bytes:
// Measured: `775`
// Estimated: `6172`
// Minimum execution time: 83_393_000 picoseconds.
Weight::from_parts(84_682_000, 6172)
.saturating_add(T::DbWeight::get().reads(6_u64))
.saturating_add(T::DbWeight::get().writes(5_u64))
}
}

Binary file not shown.

View file

@ -0,0 +1,305 @@
import invariant from "tiny-invariant";
import { logger, printDivider, printHeader } from "utils";
import { createPapiConnectors } from "utils/papi";
import { type Hex, keccak256 } from "viem";
import { buildNetworkId } from "../../../configs/contracts/config";
import { compressedPubKeyToEthereumAddress } from "../../../launcher/datahaven";
interface UpdateBeefyCheckpointOptions {
chain: string;
environment?: string;
rpcUrl: string;
}
interface BeefyCheckpointData {
startBlock: number;
minNumRequiredSignatures: number;
initialValidatorSetId: number;
initialValidatorHashes: string[];
nextValidatorSetId: number;
nextValidatorHashes: string[];
}
/**
* Converts an array of compressed public keys to authority hashes.
*
* @param authorityPublicKeys - Array of compressed public keys as hex strings
* @returns Array of authority hashes (keccak256 of Ethereum addresses)
*/
const computeAuthorityHashes = (authorityPublicKeys: string[]): string[] => {
const authorityHashes: string[] = [];
for (const compressedKey of authorityPublicKeys) {
const ethAddress = compressedPubKeyToEthereumAddress(compressedKey);
const authorityHash = keccak256(ethAddress as Hex);
authorityHashes.push(authorityHash);
logger.debug(
` ${compressedKey.slice(0, 20)}... -> ${ethAddress} -> ${authorityHash.slice(0, 20)}...`
);
}
return authorityHashes;
};
/**
* Calculates the minimum number of required signatures for BFT security.
* Uses the same formula as Snowbridge's BeefyClient contract to ensure
* strictly more than 2/3 of validators must sign.
*
* Formula: n - floor((n-1)/3)
*
* This ensures strictly > 2/3 majority. For example:
* - n=3: returns 3 (not 2, which would be exactly 2/3)
* - n=6: returns 5 (not 4, which would be exactly 2/3)
* - n=100: returns 67 (strictly > 66.67)
*
* @see https://github.com/datahaven-xyz/snowbridge/blob/main/contracts/src/BeefyClient.sol
* @param validatorCount - The number of validators
* @returns The minimum number of required signatures
*/
const calculateMinRequiredSignatures = (validatorCount: number): number => {
// For BFT security, we need strictly > 2/3 of validators to sign
// This matches Snowbridge's computeQuorum function
if (validatorCount <= 3) {
return validatorCount;
}
return validatorCount - Math.floor((validatorCount - 1) / 3);
};
/**
* Fetches BEEFY checkpoint data from a DataHaven chain including both current and next
* authority sets along with their validator set IDs, the latest finalized block,
* and calculates the minimum required signatures.
*
* All queries are performed at the same finalized block to ensure consistency.
*
* @param rpcUrl - WebSocket RPC endpoint of the DataHaven chain
* @returns BEEFY checkpoint data with validator set IDs, authority hashes, startBlock, and minNumRequiredSignatures
*/
const fetchBeefyCheckpointData = async (rpcUrl: string): Promise<BeefyCheckpointData> => {
logger.info(`📡 Connecting to DataHaven chain at ${rpcUrl}...`);
const { client: papiClient, typedApi: dhApi } = createPapiConnectors(rpcUrl);
try {
// First, get the finalized block hash to use for all subsequent queries
logger.info("🔍 Fetching latest finalized block...");
const finalizedBlock = await papiClient.getFinalizedBlock();
const startBlock = finalizedBlock.number;
const blockHash = finalizedBlock.hash;
logger.success(`Latest finalized block: ${startBlock} (${blockHash})`);
// Fetch all BEEFY data in parallel at the same finalized block
logger.info("🔍 Fetching BEEFY data (ValidatorSetId, Authorities, NextAuthorities)...");
const [validatorSetId, authoritiesRaw, nextAuthoritiesRaw] = await Promise.all([
dhApi.query.Beefy.ValidatorSetId.getValue({ at: blockHash }),
dhApi.query.Beefy.Authorities.getValue({ at: blockHash }),
dhApi.query.Beefy.NextAuthorities.getValue({ at: blockHash })
]);
// Validate results
invariant(validatorSetId !== undefined, "Failed to fetch BEEFY ValidatorSetId");
logger.success(`Current ValidatorSetId: ${validatorSetId}`);
invariant(
authoritiesRaw && authoritiesRaw.length > 0,
"No BEEFY Authorities found on the chain"
);
const currentAuthorityKeys = authoritiesRaw.map((key) => key.asHex());
logger.success(`Found ${currentAuthorityKeys.length} current BEEFY authorities`);
invariant(
nextAuthoritiesRaw && nextAuthoritiesRaw.length > 0,
"No BEEFY NextAuthorities found on the chain"
);
const nextAuthorityKeys = nextAuthoritiesRaw.map((key) => key.asHex());
logger.success(`Found ${nextAuthorityKeys.length} next BEEFY authorities`);
// Calculate minimum required signatures based on validator count
// Uses Snowbridge's formula: n - floor((n-1)/3) for strictly > 2/3 majority
const minNumRequiredSignatures = calculateMinRequiredSignatures(currentAuthorityKeys.length);
logger.info(
`📊 Minimum required signatures: ${minNumRequiredSignatures} (${currentAuthorityKeys.length} - floor((${currentAuthorityKeys.length}-1)/3))`
);
// Compute hashes for both sets
logger.info("🔐 Computing authority hashes for current set...");
const initialValidatorHashes = computeAuthorityHashes(currentAuthorityKeys);
logger.info("🔐 Computing authority hashes for next set...");
const nextValidatorHashes = computeAuthorityHashes(nextAuthorityKeys);
// Check if the sets are identical
const setsAreIdentical =
JSON.stringify(initialValidatorHashes) === JSON.stringify(nextValidatorHashes);
if (setsAreIdentical) {
logger.info(" Current and next authority sets are identical");
} else {
logger.info(" Current and next authority sets differ");
}
return {
startBlock,
minNumRequiredSignatures,
initialValidatorSetId: Number(validatorSetId),
initialValidatorHashes,
nextValidatorSetId: Number(validatorSetId) + 1,
nextValidatorHashes
};
} finally {
papiClient.destroy();
}
};
/**
* Updates the config file with the fetched BEEFY checkpoint data.
*
* @param networkId - The network identifier (e.g., "hoodi", "stagenet-hoodi")
* @param checkpointData - BEEFY checkpoint data including validator set IDs, hashes, startBlock, and minNumRequiredSignatures
*/
const updateConfigFile = async (
networkId: string,
checkpointData: BeefyCheckpointData
): Promise<void> => {
const configFilePath = `../contracts/config/${networkId}.json`;
const configFile = Bun.file(configFilePath);
if (!(await configFile.exists())) {
throw new Error(`Configuration file not found: ${configFilePath}`);
}
const configContent = await configFile.text();
const configJson = JSON.parse(configContent);
if (!configJson.snowbridge) {
logger.warn(`"snowbridge" section not found in config, creating it.`);
configJson.snowbridge = {};
}
// Store the old values for comparison
const oldStartBlock = configJson.snowbridge.startBlock;
const oldMinSigs = configJson.snowbridge.minNumRequiredSignatures;
const oldInitialId = configJson.snowbridge.initialValidatorSetId;
const oldNextId = configJson.snowbridge.nextValidatorSetId;
const oldInitial = configJson.snowbridge.initialValidatorHashes || [];
const oldNext = configJson.snowbridge.nextValidatorHashes || [];
// Update with new values
configJson.snowbridge.startBlock = checkpointData.startBlock;
configJson.snowbridge.minNumRequiredSignatures = checkpointData.minNumRequiredSignatures;
configJson.snowbridge.initialValidatorSetId = checkpointData.initialValidatorSetId;
configJson.snowbridge.initialValidatorHashes = checkpointData.initialValidatorHashes;
configJson.snowbridge.nextValidatorSetId = checkpointData.nextValidatorSetId;
configJson.snowbridge.nextValidatorHashes = checkpointData.nextValidatorHashes;
await Bun.write(configFilePath, `${JSON.stringify(configJson, null, 2)}\n`);
logger.success(`Config file updated: ${configFilePath}`);
// Show what changed
if (oldStartBlock !== checkpointData.startBlock) {
logger.info(` startBlock: ${oldStartBlock ?? "unset"} -> ${checkpointData.startBlock}`);
}
if (oldMinSigs !== checkpointData.minNumRequiredSignatures) {
logger.info(
` minNumRequiredSignatures: ${oldMinSigs ?? "unset"} -> ${checkpointData.minNumRequiredSignatures}`
);
}
if (oldInitialId !== checkpointData.initialValidatorSetId) {
logger.info(
` initialValidatorSetId: ${oldInitialId ?? "unset"} -> ${checkpointData.initialValidatorSetId}`
);
}
if (oldNextId !== checkpointData.nextValidatorSetId) {
logger.info(
` nextValidatorSetId: ${oldNextId ?? "unset"} -> ${checkpointData.nextValidatorSetId}`
);
}
if (JSON.stringify(oldInitial) !== JSON.stringify(checkpointData.initialValidatorHashes)) {
logger.info(
` initialValidatorHashes: ${oldInitial.length} -> ${checkpointData.initialValidatorHashes.length} entries`
);
}
if (JSON.stringify(oldNext) !== JSON.stringify(checkpointData.nextValidatorHashes)) {
logger.info(
` nextValidatorHashes: ${oldNext.length} -> ${checkpointData.nextValidatorHashes.length} entries`
);
}
};
/**
* Main handler for the update-beefy-checkpoint command.
* Fetches BEEFY authorities from a live DataHaven chain and updates the config file.
*/
export const updateBeefyCheckpoint = async (
options: UpdateBeefyCheckpointOptions
): Promise<void> => {
const networkId = buildNetworkId(options.chain, options.environment);
printHeader(`Updating BEEFY Checkpoint for ${networkId}`);
logger.info("📋 Configuration:");
logger.info(` Chain: ${options.chain}`);
if (options.environment) {
logger.info(` Environment: ${options.environment}`);
}
logger.info(` RPC URL: ${options.rpcUrl}`);
logger.info(` Config file: contracts/config/${networkId}.json`);
printDivider();
try {
// Fetch checkpoint data from the live chain
const checkpointData = await fetchBeefyCheckpointData(options.rpcUrl);
printDivider();
// Display the checkpoint data
logger.info("📝 BEEFY Checkpoint Data:");
logger.info(` Start Block: ${checkpointData.startBlock}`);
logger.info(` Min Required Signatures: ${checkpointData.minNumRequiredSignatures}`);
logger.info(` Initial Validator Set ID: ${checkpointData.initialValidatorSetId}`);
logger.info(` Initial Validators (${checkpointData.initialValidatorHashes.length} total):`);
for (let i = 0; i < checkpointData.initialValidatorHashes.length; i++) {
logger.info(` [${i}] ${checkpointData.initialValidatorHashes[i]}`);
}
logger.info(` Next Validator Set ID: ${checkpointData.nextValidatorSetId}`);
logger.info(` Next Validators (${checkpointData.nextValidatorHashes.length} total):`);
for (let i = 0; i < checkpointData.nextValidatorHashes.length; i++) {
logger.info(` [${i}] ${checkpointData.nextValidatorHashes[i]}`);
}
printDivider();
// Update the config file
await updateConfigFile(networkId, checkpointData);
printDivider();
logger.success(`BEEFY checkpoint updated successfully for ${networkId}`);
} catch (error) {
logger.error(`Failed to update BEEFY checkpoint: ${error}`);
throw error;
}
};
/**
* CLI action handler for the update-beefy-checkpoint command.
* Note: Chain and environment validation is handled by contractsPreActionHook.
*/
export const contractsUpdateBeefyCheckpoint = async (
options: any,
_command: any
): Promise<void> => {
const { chain, environment, rpcUrl } = options;
// Validate rpc-url (specific to this command, not validated by preAction hook)
if (!rpcUrl) {
logger.error("❌ --rpc-url is required (WebSocket URL to the DataHaven chain)");
process.exit(1);
}
await updateBeefyCheckpoint({
chain,
environment,
rpcUrl
});
};

View file

@ -3,8 +3,15 @@ import { deployContracts } from "../../../scripts/deploy-contracts";
import { showDeploymentPlanAndStatus } from "./status";
import { verifyContracts } from "./verify";
export const contractsDeploy = async (options: any, command: any) => {
// Try to get chain from options or command
/**
* Extracts chain and environment options from command options and parent command.
* This handles the case where options may be specified at either the subcommand
* or parent command level.
*/
const getChainAndEnvironment = (
options: any,
command: any
): { chain: string | undefined; environment: string | undefined } => {
let chain = options.chain;
if (!chain && command.parent) {
chain = command.parent.getOptionValue("chain");
@ -13,19 +20,38 @@ export const contractsDeploy = async (options: any, command: any) => {
chain = command.getOptionValue("chain");
}
printHeader(`Deploying DataHaven Contracts to ${chain}`);
let environment = options.environment;
if (!environment && command.parent) {
environment = command.parent.getOptionValue("environment");
}
return { chain, environment };
};
export const contractsDeploy = async (options: any, command: any) => {
const { chain, environment } = getChainAndEnvironment(options, command);
// Build display name for logging
const displayName = environment ? `${environment}-${chain}` : chain;
printHeader(`Deploying DataHaven Contracts to ${displayName}`);
const txExecutionOverride = options.executeOwnerTransactions ? true : undefined;
try {
logger.info("🚀 Starting deployment...");
logger.info(`📡 Using chain: ${chain}`);
if (environment) {
logger.info(`📡 Using environment: ${environment}`);
}
if (options.rpcUrl) {
logger.info(`📡 Using RPC URL: ${options.rpcUrl}`);
}
// Chain is guaranteed to be defined by preAction hook validation
await deployContracts({
chain: chain,
chain: chain!,
environment: environment,
rpcUrl: options.rpcUrl,
privateKey: options.privateKey,
avsOwnerKey: options.avsOwnerKey,
@ -40,34 +66,27 @@ export const contractsDeploy = async (options: any, command: any) => {
};
export const contractsCheck = async (options: any, command: any) => {
// Try to get chain from options or command
let chain = options.chain;
if (!chain && command.parent) {
chain = command.parent.getOptionValue("chain");
}
if (!chain) {
chain = command.getOptionValue("chain");
}
const { chain, environment } = getChainAndEnvironment(options, command);
printHeader(`Checking DataHaven ${chain} Configuration and Status`);
// Build network identifier with environment prefix if specified
const networkId = environment ? `${environment}-${chain}` : chain;
printHeader(`Checking DataHaven ${networkId} Configuration and Status`);
logger.info("🔍 Showing deployment plan and status");
// Use the status function from status.ts
await showDeploymentPlanAndStatus(chain);
// Chain is guaranteed to be defined by preAction hook validation
await showDeploymentPlanAndStatus(chain!, environment);
};
export const contractsVerify = async (options: any, command: any) => {
// Try to get chain from options or command
let chain = options.chain;
if (!chain && command.parent) {
chain = command.parent.getOptionValue("chain");
}
if (!chain) {
chain = command.getOptionValue("chain");
}
const { chain, environment } = getChainAndEnvironment(options, command);
printHeader(`Verifying DataHaven Contracts on ${chain} Block Explorer`);
// Build display name for logging
const displayName = environment ? `${environment}-${chain}` : chain;
printHeader(`Verifying DataHaven Contracts on ${displayName} Block Explorer`);
if (options.skipVerification) {
logger.info("⏭️ Skipping verification as requested");
@ -77,7 +96,8 @@ export const contractsVerify = async (options: any, command: any) => {
try {
const verifyOptions = {
...options,
chain: chain
chain: chain,
environment: environment
};
await verifyContracts(verifyOptions);
printDivider();
@ -86,26 +106,63 @@ export const contractsVerify = async (options: any, command: any) => {
}
};
/**
* Supported networks for contract deployment.
* These must correspond to config files in contracts/config/{network}.json
*/
export const SUPPORTED_NETWORKS = [
"anvil",
"hoodi",
"stagenet-hoodi",
"testnet-hoodi",
"ethereum",
"mainnet-ethereum"
] as const;
export const contractsPreActionHook = async (thisCommand: any) => {
let chain = thisCommand.getOptionValue("chain");
let environment = thisCommand.getOptionValue("environment");
if (!chain && thisCommand.parent) {
chain = thisCommand.parent.getOptionValue("chain");
}
if (!environment && thisCommand.parent) {
environment = thisCommand.parent.getOptionValue("environment");
}
const privateKey = thisCommand.getOptionValue("privateKey");
if (!chain) {
logger.error("❌ Chain is required. Use --chain option (hoodi, mainnet, anvil)");
logger.error("❌ Chain is required. Use --chain option (hoodi, ethereum, anvil)");
process.exit(1);
}
const supportedChains = ["hoodi", "mainnet", "anvil"];
const supportedChains = ["hoodi", "ethereum", "anvil"];
if (!supportedChains.includes(chain)) {
logger.error(`❌ Unsupported chain: ${chain}. Supported chains: ${supportedChains.join(", ")}`);
process.exit(1);
}
// Validate environment if provided
if (environment) {
const supportedEnvironments = ["stagenet", "testnet", "mainnet"];
if (!supportedEnvironments.includes(environment)) {
logger.error(
`❌ Unsupported environment: ${environment}. Supported environments: ${supportedEnvironments.join(", ")}`
);
process.exit(1);
}
// Validate the full network identifier exists
const networkId = `${environment}-${chain}`;
if (!SUPPORTED_NETWORKS.includes(networkId as (typeof SUPPORTED_NETWORKS)[number])) {
logger.error(
`❌ Unsupported network combination: ${networkId}. Supported networks: ${SUPPORTED_NETWORKS.join(", ")}`
);
process.exit(1);
}
}
if (!privateKey && !process.env.DEPLOYER_PRIVATE_KEY) {
logger.warn(
"⚠️ Private key not provided. Will use DEPLOYER_PRIVATE_KEY environment variable if set, or default Anvil key."

View file

@ -1,4 +1,6 @@
export * from "./beefy-checkpoint";
export * from "./deploy";
export * from "./rewards-origin";
export * from "./status";
export * from "./update-metadata";
export * from "./verify";

View file

@ -0,0 +1,327 @@
import invariant from "tiny-invariant";
import { logger, printDivider, printHeader } from "utils";
import { createPapiConnectors } from "utils/papi";
import { concat, type Hex, toBytes, toHex } from "viem";
import { buildNetworkId } from "../../../configs/contracts/config";
interface UpdateRewardsOriginOptions {
chain: string;
environment?: string;
rpcUrl: string;
genesisHash?: string;
}
/**
* Derives an AccountId20 from a PalletId using the same algorithm as Substrate's
* `into_account_truncating()`.
*
* The algorithm (see https://www.shawntabrizi.com/substrate-js-utilities/):
* 1. Prepends "modl" (4 bytes) to the 8-byte pallet ID
* 2. For AccountId20 (H160), takes the first 20 bytes: modl(4) + pallet_id(8) + zeros(8)
*
* Note: This is a simple truncation, NOT a hash operation.
*
* @param palletId - The 8-character pallet ID string (e.g., "dh/evrew")
* @returns The derived AccountId20 as a hex string
*/
const palletIdToAccountId20 = (palletId: string): Hex => {
invariant(palletId.length === 8, "Pallet ID must be exactly 8 characters");
// Build: "modl" (4 bytes) + pallet_id (8 bytes) + zeros (8 bytes) = 20 bytes
const prefix = toBytes("modl");
const palletIdBytes = toBytes(palletId);
const accountId20 = new Uint8Array(20);
accountId20.set(prefix, 0);
accountId20.set(palletIdBytes, 4);
// Remaining 8 bytes are already zeros (padding)
return toHex(accountId20);
};
/**
* Computes the Agent ID (H256) for a pallet's sovereign account on the DataHaven chain.
*
* The Agent ID is computed following Snowbridge's `AgentIdOf` type, which uses
* `HashedDescription` with `DescribeGlobalPrefix`. For an AccountKey20 on a chain
* identified by its genesis hash, the encoding is:
*
* blake2_256(SCALE_ENCODE(("GlobalConsensus", ByGenesis(genesis_hash), ("AccountKey20", account_key))))
*
* NOTE: This computation follows Snowbridge's pattern but may need verification against
* the actual on-chain Agent ID. The preferred approach is to set RewardsAgentOrigin on
* the chain and fetch it via this command.
*
* @param genesisHash - The chain's genesis hash (32 bytes, hex string with 0x prefix)
* @param accountKey20 - The 20-byte account key (hex string with 0x prefix)
* @returns The computed Agent ID as a hex string
*/
const computeAgentId = async (genesisHash: Hex, accountKey20: Hex): Promise<Hex> => {
// Import blake2b dynamically (it's an ESM module)
const { blake2b } = await import("@noble/hashes/blake2b");
// Validate inputs
invariant(
genesisHash.length === 66,
`Genesis hash must be 32 bytes (66 chars with 0x prefix), got ${genesisHash.length}`
);
invariant(
accountKey20.length === 42,
`Account key must be 20 bytes (42 chars with 0x prefix), got ${accountKey20.length}`
);
// SCALE encoding for the location description follows Snowbridge's pattern:
// ("GlobalConsensus", ByGenesis(genesis_hash), interior_description)
//
// Where interior_description for AccountKey20 is:
// ("AccountKey20", key)
//
// In SCALE for fixed-size arrays (like b"GlobalConsensus"):
// - Fixed-size byte arrays are encoded as raw bytes without length prefix
// - Variable-length Vec<u8> gets a compact length prefix
// - Enums are encoded as variant index + payload
// "GlobalConsensus" as raw bytes (15 bytes, no length prefix for fixed array)
const globalConsensusBytes = toBytes("GlobalConsensus");
// ByGenesis variant (index 0 in NetworkId enum) + genesis hash (32 bytes)
// NetworkId::ByGenesis is the first variant, so index = 0
const byGenesisVariant = new Uint8Array([0]);
const genesisBytes = toBytes(genesisHash);
// "AccountKey20" as raw bytes (12 bytes, no length prefix for fixed array)
const accountKey20StrBytes = toBytes("AccountKey20");
// Account key bytes (20 bytes)
const accountKeyBytes = toBytes(accountKey20);
// Build the interior description: ("AccountKey20", key) as raw bytes
const interiorDescription = concat([accountKey20StrBytes, accountKeyBytes]);
// Length prefix for interior (SCALE compact encoding: value << 2 for values < 64)
const interiorLen = interiorDescription.length;
const interiorLenCompact = new Uint8Array([interiorLen << 2]);
// Final encoding: GlobalConsensus prefix + ByGenesis(genesis) + compact_len(interior)
const encoded = concat([
globalConsensusBytes,
byGenesisVariant,
genesisBytes,
interiorLenCompact,
interiorDescription
]);
// Hash with blake2b-256 to get the Agent ID (same as Snowbridge's blake2_256)
const hash = blake2b(new Uint8Array(encoded), { dkLen: 32 });
return toHex(hash);
};
/**
* Fetches the RewardsAgentOrigin from the runtime parameters.
*
* @param rpcUrl - WebSocket RPC endpoint of the DataHaven chain
* @returns The RewardsAgentOrigin as a hex string, or null if not set or zero
*/
const fetchRewardsAgentOrigin = async (rpcUrl: string): Promise<Hex | null> => {
logger.info(`📡 Connecting to DataHaven chain at ${rpcUrl}...`);
const { client: papiClient, typedApi: dhApi } = createPapiConnectors(rpcUrl);
try {
logger.info("🔍 Fetching RewardsAgentOrigin from runtime parameters...");
// Query the Parameters pallet for RewardsAgentOrigin
const parameter = await dhApi.query.Parameters.Parameters.getValue(
{
type: "RuntimeConfig",
value: { type: "RewardsAgentOrigin", value: undefined }
},
{ at: "best" }
);
if (!parameter) {
logger.info(" RewardsAgentOrigin parameter not found (using default)");
return null;
}
// Extract the value from the parameter result
// The parameter is wrapped in the RuntimeConfig enum variant
if (parameter.type === "RuntimeConfig" && parameter.value.type === "RewardsAgentOrigin") {
const origin = parameter.value.value;
if (origin) {
const originHex = origin.asHex();
// Check if it's the zero hash
const zeroHash =
"0x0000000000000000000000000000000000000000000000000000000000000000" as Hex;
if (originHex === zeroHash) {
logger.info(" RewardsAgentOrigin is set to zero (placeholder)");
return null;
}
logger.success(`Found RewardsAgentOrigin: ${originHex}`);
return originHex as Hex;
}
}
logger.info(" RewardsAgentOrigin value not available");
return null;
} finally {
papiClient.destroy();
}
};
/**
* Fetches the genesis hash from the chain.
*
* @param rpcUrl - WebSocket RPC endpoint of the DataHaven chain
* @returns The genesis hash as a hex string
*/
const fetchGenesisHash = async (rpcUrl: string): Promise<Hex> => {
logger.info("🔍 Fetching genesis hash from chain...");
const { client: papiClient } = createPapiConnectors(rpcUrl);
try {
// Use _request to call chain_getBlockHash RPC method with block number 0
const genesisHash = await papiClient._request<string>("chain_getBlockHash", [0]);
logger.success(`Genesis hash: ${genesisHash}`);
return genesisHash as Hex;
} finally {
papiClient.destroy();
}
};
/**
* Updates the config file with the rewards message origin.
*
* @param networkId - The network identifier (e.g., "hoodi", "stagenet-hoodi")
* @param rewardsMessageOrigin - The rewards message origin (Agent ID)
*/
const updateConfigFile = async (networkId: string, rewardsMessageOrigin: Hex): Promise<void> => {
const configFilePath = `../contracts/config/${networkId}.json`;
const configFile = Bun.file(configFilePath);
if (!(await configFile.exists())) {
throw new Error(`Configuration file not found: ${configFilePath}`);
}
const configContent = await configFile.text();
const configJson = JSON.parse(configContent);
if (!configJson.snowbridge) {
logger.warn(`"snowbridge" section not found in config, creating it.`);
configJson.snowbridge = {};
}
const oldOrigin = configJson.snowbridge.rewardsMessageOrigin;
configJson.snowbridge.rewardsMessageOrigin = rewardsMessageOrigin;
await Bun.write(configFilePath, `${JSON.stringify(configJson, null, 2)}\n`);
logger.success(`Config file updated: ${configFilePath}`);
if (oldOrigin !== rewardsMessageOrigin) {
logger.info(` rewardsMessageOrigin: ${oldOrigin ?? "unset"} -> ${rewardsMessageOrigin}`);
}
};
/**
* Main handler for the update-rewards-origin command.
* Fetches or computes the RewardsAgentOrigin and updates the config file.
*/
export const updateRewardsOrigin = async (options: UpdateRewardsOriginOptions): Promise<void> => {
const networkId = buildNetworkId(options.chain, options.environment);
printHeader(`Updating Rewards Message Origin for ${networkId}`);
logger.info("📋 Configuration:");
logger.info(` Chain: ${options.chain}`);
if (options.environment) {
logger.info(` Environment: ${options.environment}`);
}
logger.info(` RPC URL: ${options.rpcUrl}`);
if (options.genesisHash) {
logger.info(` Genesis hash (provided): ${options.genesisHash}`);
}
logger.info(` Config file: contracts/config/${networkId}.json`);
printDivider();
try {
// Step 1: Try to fetch RewardsAgentOrigin from the chain
let rewardsMessageOrigin = await fetchRewardsAgentOrigin(options.rpcUrl);
printDivider();
if (rewardsMessageOrigin) {
// Use the value from the chain
logger.info("✅ Using RewardsAgentOrigin from chain runtime parameters");
} else {
// Compute the Agent ID from genesis hash and pallet account
logger.info("🔧 Computing RewardsAgentOrigin from genesis hash and pallet account...");
// Get genesis hash (from option or fetch from chain)
const genesisHash = options.genesisHash
? (options.genesisHash as Hex)
: await fetchGenesisHash(options.rpcUrl);
// Derive the ExternalValidatorRewardsAccount from the pallet ID "dh/evrew"
const palletId = "dh/evrew";
logger.info(`🔐 Deriving account from pallet ID: "${palletId}"`);
const rewardsAccount = palletIdToAccountId20(palletId);
logger.info(` Rewards pallet account: ${rewardsAccount}`);
// Compute the Agent ID
logger.info("🔐 Computing Agent ID...");
logger.warn(
"⚠️ Note: Computed Agent ID may need verification. Prefer setting RewardsAgentOrigin on-chain."
);
rewardsMessageOrigin = await computeAgentId(genesisHash, rewardsAccount);
logger.info(` Agent ID: ${rewardsMessageOrigin}`);
}
printDivider();
// Display the final value
logger.info("📝 Rewards Message Origin:");
logger.info(` ${rewardsMessageOrigin}`);
printDivider();
// Update the config file
await updateConfigFile(networkId, rewardsMessageOrigin);
printDivider();
logger.success(`Rewards message origin updated successfully for ${networkId}`);
} catch (error) {
logger.error(`Failed to update rewards message origin: ${error}`);
throw error;
}
};
/**
* CLI action handler for the update-rewards-origin command.
* Note: Chain and environment validation is handled by contractsPreActionHook.
*/
export const contractsUpdateRewardsOrigin = async (options: any, _command: any): Promise<void> => {
const { chain, environment, rpcUrl, genesisHash } = options;
// Validate rpc-url (specific to this command, not validated by preAction hook)
if (!rpcUrl) {
logger.error("❌ --rpc-url is required (WebSocket URL to the DataHaven chain)");
process.exit(1);
}
// Validate genesis hash format if provided
if (genesisHash) {
if (!/^0x[0-9a-fA-F]{64}$/.test(genesisHash)) {
logger.error("❌ --genesis-hash must be a 32-byte hex string (0x + 64 hex chars)");
process.exit(1);
}
}
await updateRewardsOrigin({
chain,
environment,
rpcUrl,
genesisHash
});
};

View file

@ -1,16 +1,24 @@
import { logger, printDivider } from "utils";
import { getChainDeploymentParams, loadChainConfig } from "../../../configs/contracts/config";
import {
buildNetworkId,
getChainDeploymentParams,
loadChainConfig
} from "../../../configs/contracts/config";
import { checkContractVerification } from "./verify";
/**
* Shows the status of chain deployment and verification
* @param chain - The target chain (hoodi, mainnet, anvil)
* @param environment - Optional deployment environment (stagenet, testnet, mainnet)
*/
export const showDeploymentPlanAndStatus = async (chain: string) => {
export const showDeploymentPlanAndStatus = async (chain: string, environment?: string) => {
const networkId = buildNetworkId(chain, environment);
try {
const config = await loadChainConfig(chain);
const config = await loadChainConfig(chain, environment);
const deploymentParams = getChainDeploymentParams(chain);
const displayData = {
const displayData: Record<string, string> = {
Network: `${deploymentParams.network} (Chain ID: ${deploymentParams.chainId})`,
"RPC URL": deploymentParams.rpcUrl,
"Block Explorer": deploymentParams.blockExplorer,
@ -19,19 +27,24 @@ export const showDeploymentPlanAndStatus = async (chain: string) => {
"Rewards Initiator": `${config.avs.rewardsInitiator.slice(0, 10)}...${config.avs.rewardsInitiator.slice(-8)}`,
"Veto Committee Member": `${config.avs.vetoCommitteeMember.slice(0, 10)}...${config.avs.vetoCommitteeMember.slice(-8)}`
};
if (environment) {
displayData.Environment = environment;
}
console.table(displayData);
await showDatahavenContractStatus(chain, deploymentParams.rpcUrl);
await showDatahavenContractStatus(networkId, deploymentParams.rpcUrl);
await showEigenLayerContractStatus(
config,
deploymentParams.chainId.toString(),
deploymentParams.rpcUrl,
chain
networkId
);
printDivider();
} catch (error) {
logger.error(`❌ Failed to load ${chain} configuration: ${error}`);
logger.error(`❌ Failed to load ${networkId} configuration: ${error}`);
}
};
@ -69,8 +82,10 @@ const printContractStatus = async (
/**
* Shows the status of all contracts (deployment + verification)
* @param networkId - The network identifier (e.g., "hoodi", "stagenet-hoodi")
* @param rpcUrl - The RPC URL for the chain
*/
const showDatahavenContractStatus = async (chain: string, rpcUrl: string) => {
const showDatahavenContractStatus = async (networkId: string, rpcUrl: string) => {
try {
const contracts = [
{ name: "DataHavenServiceManager", key: "ServiceManagerImplementation" },
@ -81,7 +96,7 @@ const showDatahavenContractStatus = async (chain: string, rpcUrl: string) => {
logger.info("DataHaven contracts");
const deploymentsPath = `../contracts/deployments/${chain}.json`;
const deploymentsPath = `../contracts/deployments/${networkId}.json`;
const deploymentsFile = Bun.file(deploymentsPath);
const exists = await deploymentsFile.exists();
@ -97,7 +112,12 @@ const showDatahavenContractStatus = async (chain: string, rpcUrl: string) => {
for (const contract of contracts) {
const address = deployments[contract.key];
await printContractStatus({ name: contract.name, address }, etherscanApiKey, chain, rpcUrl);
await printContractStatus(
{ name: contract.name, address },
etherscanApiKey,
networkId,
rpcUrl
);
}
} catch (error) {
logger.warn(`⚠️ Could not check contract status: ${error}`);
@ -106,22 +126,26 @@ const showDatahavenContractStatus = async (chain: string, rpcUrl: string) => {
/**
* Shows the status of EigenLayer contracts (verification only)
* @param config - The chain configuration
* @param chainId - The chain ID
* @param rpcUrl - The RPC URL for the chain
* @param networkId - The network identifier (e.g., "hoodi", "stagenet-hoodi")
*/
const showEigenLayerContractStatus = async (
config: any,
chainId: string,
rpcUrl: string,
chain: string
networkId: string
) => {
try {
// For local/anvil deployments, read addresses from deployments file
// For testnet/mainnet, use addresses from config file
let eigenLayerAddresses: Record<string, string> = {};
const isLocal = chain === "anvil" || chain === "local";
const isLocal = networkId === "anvil" || networkId === "local";
if (isLocal) {
try {
const deploymentsPath = `../contracts/deployments/${chain === "local" ? "anvil" : chain}.json`;
const deploymentsPath = `../contracts/deployments/${networkId === "local" ? "anvil" : networkId}.json`;
const deploymentsFile = Bun.file(deploymentsPath);
if (await deploymentsFile.exists()) {
const deployments = await deploymentsFile.json();

View file

@ -1,10 +1,11 @@
import { execSync } from "node:child_process";
import { logger } from "utils";
import { parseDeploymentsFile } from "utils/contracts";
import { CHAIN_CONFIGS, getChainConfig } from "../../../configs/contracts/config";
import { buildNetworkId, CHAIN_CONFIGS, getChainConfig } from "../../../configs/contracts/config";
interface ContractsVerifyOptions {
chain: string;
environment?: string;
rpcUrl?: string;
skipVerification: boolean;
}
@ -26,7 +27,10 @@ export const verifyContracts = async (options: ContractsVerifyOptions) => {
return;
}
logger.info(`🔍 Verifying contracts on ${options.chain} block explorer using Foundry...`);
// Build network identifier for deployment file lookup
const networkId = buildNetworkId(options.chain, options.environment);
logger.info(`🔍 Verifying contracts on ${networkId} block explorer using Foundry...`);
const etherscanApiKey = process.env.ETHERSCAN_API_KEY;
if (!etherscanApiKey) {
@ -35,7 +39,7 @@ export const verifyContracts = async (options: ContractsVerifyOptions) => {
return;
}
const deployments = await parseDeploymentsFile(options.chain);
const deployments = await parseDeploymentsFile(networkId);
const contractsToVerify: ContractToVerify[] = [
{

View file

@ -5,6 +5,8 @@ import {
contractsCheck,
contractsDeploy,
contractsPreActionHook,
contractsUpdateBeefyCheckpoint,
contractsUpdateRewardsOrigin,
contractsVerify,
deploy,
deployPreActionHook,
@ -199,15 +201,20 @@ const contractsCommand = program
.addHelpText(
"before",
`🫎 DataHaven: Contracts Deployment CLI for deploying DataHaven AVS contracts to supported chains
Commands:
- status: Show deployment plan, configuration, and status (default)
- deploy: Deploy contracts to specified chain
- verify: Verify deployed contracts on block explorer
- update-beefy-checkpoint: Fetch BEEFY authorities from a live chain and update config
- update-rewards-origin: Fetch or compute the RewardsAgentOrigin and update config
- update-metadata: Update the metadata URI of an existing AVS contract
Common options:
--chain: Target chain (required: hoodi, mainnet, anvil)
--chain: Target chain (required: hoodi, ethereum, anvil)
--environment: Deployment environment (stagenet, testnet, mainnet)
When specified, config files are read from {environment}-{chain}.json
and deployments are written to {environment}-{chain}.json
--rpc-url: Chain RPC URL (optional, defaults based on chain)
--private-key: Private key for deployment
--skip-verification: Skip contract verification
@ -219,7 +226,11 @@ const contractsCommand = program
contractsCommand
.command("status")
.description("Show deployment plan, configuration, and status")
.option("--chain <value>", "Target chain (hoodi, mainnet, anvil)")
.option("--chain <value>", "Target chain (hoodi, ethereum, anvil)")
.option(
"--environment <value>",
"Deployment environment (stagenet, testnet, mainnet). Config and deployment files will be prefixed with this value."
)
.option("--rpc-url <value>", "Chain RPC URL (optional, defaults based on chain)")
.option(
"--private-key <value>",
@ -234,7 +245,11 @@ contractsCommand
contractsCommand
.command("deploy")
.description("Deploy DataHaven AVS contracts to specified chain")
.option("--chain <value>", "Target chain (hoodi, mainnet, anvil)")
.option("--chain <value>", "Target chain (hoodi, ethereum, anvil)")
.option(
"--environment <value>",
"Deployment environment (stagenet, testnet, mainnet). Config and deployment files will be prefixed with this value."
)
.option("--rpc-url <value>", "Chain RPC URL (optional, defaults based on chain)")
.option(
"--private-key <value>",
@ -255,17 +270,73 @@ contractsCommand
contractsCommand
.command("verify")
.description("Verify deployed contracts on block explorer")
.option("--chain <value>", "Target chain (hoodi, mainnet, anvil)")
.option("--chain <value>", "Target chain (hoodi, ethereum, anvil)")
.option(
"--environment <value>",
"Deployment environment (stagenet, testnet, mainnet). Config and deployment files will be prefixed with this value."
)
.option("--rpc-url <value>", "Chain RPC URL (optional, defaults based on chain)")
.option("--skip-verification", "Skip contract verification", false)
.hook("preAction", contractsPreActionHook)
.action(contractsVerify);
// Contracts Update BEEFY Checkpoint
contractsCommand
.command("update-beefy-checkpoint")
.description(
"Fetch BEEFY authorities from a live DataHaven chain and update the config file with validator hashes"
)
.option("--chain <value>", "Target chain (hoodi, ethereum, anvil)")
.option(
"--environment <value>",
"Deployment environment (stagenet, testnet, mainnet). Config and deployment files will be prefixed with this value."
)
.option(
"--rpc-url <value>",
"WebSocket RPC URL of the DataHaven chain to fetch BEEFY authorities from"
)
.hook("preAction", contractsPreActionHook)
.action(async (_options: any, command: any) => {
// Options are captured by parent command due to shared option names
// Use optsWithGlobals() to get all options including inherited ones
const opts = command.optsWithGlobals();
await contractsUpdateBeefyCheckpoint(opts, command);
});
// Contracts Update Rewards Origin
contractsCommand
.command("update-rewards-origin")
.description(
"Fetch or compute the RewardsAgentOrigin and update the config file with the rewards message origin"
)
.option("--chain <value>", "Target chain (hoodi, ethereum, anvil)")
.option(
"--environment <value>",
"Deployment environment (stagenet, testnet, mainnet). Config and deployment files will be prefixed with this value."
)
.option(
"--rpc-url <value>",
"WebSocket RPC URL of the DataHaven chain to fetch RewardsAgentOrigin from"
)
.option(
"--genesis-hash <value>",
"Chain genesis hash (32 bytes hex). If not provided, will be fetched from the chain."
)
.hook("preAction", contractsPreActionHook)
.action(async (_options: any, command: any) => {
const opts = command.optsWithGlobals();
await contractsUpdateRewardsOrigin(opts, command);
});
// Contracts Update Metadata
contractsCommand
.command("update-metadata")
.description("Update AVS metadata URI for the DataHaven Service Manager")
.option("--chain <value>", "Target chain (hoodi, mainnet, anvil)")
.option("--chain <value>", "Target chain (hoodi, ethereum, anvil)")
.option(
"--environment <value>",
"Deployment environment (stagenet, testnet, mainnet). Config and deployment files will be prefixed with this value."
)
.option("--uri <value>", "New metadata URI (required)")
.option("--reset", "Use if you want to reset the metadata URI")
.option("--rpc-url <value>", "Chain RPC URL (optional, defaults based on chain)")
@ -289,16 +360,24 @@ contractsCommand
if (!chain) {
throw new Error("--chain parameter is required");
}
await updateAVSMetadataURI(chain, options.uri, {
// Build network identifier with environment prefix if specified
const environment = options.environment;
const networkId = environment ? `${environment}-${chain}` : chain;
await updateAVSMetadataURI(networkId, options.uri, {
execute: options.execute,
avsOwnerKey: options.avsOwnerKey
});
});
// Default Contracts command (runs check)
// Default Contracts command (runs check when no subcommand is specified)
// preAction hook on subcommands handles validation before the action runs
contractsCommand
.description("Show deployment plan, configuration, and status")
.option("--chain <value>", "Target chain (hoodi, mainnet, anvil)")
.option("--chain <value>", "Target chain (hoodi, ethereum, anvil)")
.option(
"--environment <value>",
"Deployment environment (stagenet, testnet, mainnet). Config and deployment files will be prefixed with this value."
)
.option("--rpc-url <value>", "Chain RPC URL (optional, defaults based on chain)")
.option(
"--private-key <value>",
@ -307,7 +386,9 @@ contractsCommand
)
.option("--skip-verification", "Skip contract verification", false)
.hook("preAction", contractsPreActionHook)
.action(contractsCheck);
.action(async (options: any, command: any) => {
await contractsCheck(options, command);
});
// ===== Exec ======
// Disabled until need arises

View file

@ -14,8 +14,8 @@ export const CHAIN_CONFIGS = {
EPOCHS_PER_SYNC_COMMITTEE_PERIOD: 256,
SYNC_COMMITTEE_SIZE: 512
},
mainnet: {
NETWORK_NAME: "mainnet",
ethereum: {
NETWORK_NAME: "ethereum",
CHAIN_ID: 1,
RPC_URL: "https://eth.llamarpc.com",
BLOCK_EXPLORER: "https://etherscan.io/",
@ -39,22 +39,39 @@ export const getChainConfig = (chain: string) => {
return CHAIN_CONFIGS[chain as keyof ChainConfigType];
};
export const loadChainConfig = async (chain: string) => {
/**
* Builds the network identifier from chain and optional environment
* When environment is specified: {environment}-{chain} (e.g., "stagenet-hoodi")
* When environment is not specified: {chain} (e.g., "hoodi")
*/
export const buildNetworkId = (chain: string, environment?: string): string => {
return environment ? `${environment}-${chain}` : chain;
};
/**
* Loads chain configuration from the config file
* @param chain - The target chain (hoodi, mainnet, anvil)
* @param environment - Optional deployment environment (stagenet, testnet, mainnet)
* When specified, loads from {environment}-{chain}.json
*/
export const loadChainConfig = async (chain: string, environment?: string) => {
const networkId = buildNetworkId(chain, environment);
try {
const configPath = `../contracts/config/${chain}.json`;
const configPath = `../contracts/config/${networkId}.json`;
const configFile = Bun.file(configPath);
if (!(await configFile.exists())) {
throw new Error(`${chain} configuration file not found at ${configPath}`);
throw new Error(`${networkId} configuration file not found at ${configPath}`);
}
const configContent = await configFile.text();
const config = JSON.parse(configContent);
logger.debug(`${chain} configuration loaded successfully`);
logger.debug(`${networkId} configuration loaded successfully`);
return config;
} catch (error) {
logger.error(`❌ Failed to load ${chain} configuration: ${error}`);
logger.error(`❌ Failed to load ${networkId} configuration: ${error}`);
throw error;
}
};

View file

@ -0,0 +1,51 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.3;
contract RecoveryChecker {
constructor() {}
function checkRecovery(
bytes32 msgHash,
uint256 v,
bytes32 r,
bytes32 s
) public view returns (address) {
(, bytes memory data) = address(0x01).staticcall(
abi.encode(msgHash, v, r, s)
);
return abi.decode(data, (address));
}
}
contract PairingChecker {
bool public status = false;
function callBn256Pairing(bytes memory input)
public
returns (bytes32 result)
{
uint256 len = input.length;
assembly {
let memPtr := mload(0x40)
let success := call(
gas(),
0x08,
0,
add(input, 0x20),
len,
memPtr,
0x20
)
switch success
case 0 {
revert(0, 0)
}
default {
result := mload(memPtr)
}
}
status =
result ==
0x0000000000000000000000000000000000000000000000000000000000000001;
}
}

View file

@ -0,0 +1,226 @@
// SPDX-License-Identifier: GPL-3.0-only
pragma solidity >=0.8.3;
contract HasherChecker {
uint256 public lastResult;
function ripemd160Check() public pure {
require(
ripemd160(bytes("Hello World!")) ==
hex"8476ee4631b9b30ac2754b0ee0c47e161d3f724c"
);
}
function bn128AdditionCheck() public {
bool success;
uint256[4] memory input = [
0x2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703,
0x301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915,
0x18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9,
0x063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266
];
uint256[2] memory result;
assembly {
// 0x06 id of the bn256Add precompile
// 0 number of ether to transfer
// 128 size of call parameters, i.e. 128 bytes total
// 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point
success := call(not(0), 0x06, 0, input, 128, result, 64)
}
require(success, "elliptic curve addition failed");
require(
result[0] ==
0x2bd3e6d0f3b142924f5ca7b49ce5b9d54c4703d7ae5648e61d02268b1a0a9fb7,
"failed"
);
require(
result[1] ==
0x21611ce0a6af85915e2f1d70300909ce2e49dfad4a4619c8390cae66cefdb204,
"failed"
);
}
function bn128MultiplyCheck() public {
bool success;
uint256[3] memory input = [
0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,
0x1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6,
0x30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000
];
uint256[2] memory result;
assembly {
// 0x07 id of the bn256Mul precompile
// 0 number of ether to transfer
// 96 size of call parameters, i.e. 128 bytes total
// 64 size of return value, i.e. 64 bytes / 512 bit for a BN256 curve point
success := call(not(0), 0x07, 0, input, 96, result, 64)
}
require(success, "elliptic curve addition failed");
require(
result[0] ==
0x1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3,
"failed"
);
require(
result[1] ==
0x163511ddc1c3f25d396745388200081287b3fd1472d8339d5fecb2eae0830451,
"failed"
);
}
function bn128PairingCheck() public {
uint256[12] memory input = [
0x2eca0c7238bf16e83e7a1e6c5d49540685ff51380f309842a98561558019fc02,
0x03d3260361bb8451de5ff5ecd17f010ff22f5c31cdf184e9020b06fa5997db84,
0x1213d2149b006137fcfb23036606f848d638d576a120ca981b5b1a5f9300b3ee,
0x2276cf730cf493cd95d64677bbb75fc42db72513a4c1e387b476d056f80aa75f,
0x21ee6226d31426322afcda621464d0611d226783262e21bb3bc86b537e986237,
0x096df1f82dff337dd5972e32a8ad43e28a78a96a823ef1cd4debe12b6552ea5f,
0x06967a1237ebfeca9aaae0d6d0bab8e28c198c5a339ef8a2407e31cdac516db9,
0x22160fa257a5fd5b280642ff47b65eca77e626cb685c84fa6d3b6882a283ddd1,
0x198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2,
0x1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed,
0x090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b,
0x12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa
];
uint256[1] memory result;
bool success;
assembly {
// 0x08 id of the bn256CheckPairing precompile
// 0 number of ether to transfer
// 0 since we have an array of fixed length, our input starts in 0
// 384 size of call parameters, i.e. 12*256 bits == 384 bytes
// 32 size of result (one 32 byte boolean!)
success := call(sub(gas(), 2000), 0x08, 0, input, 384, result, 32)
}
require(success, "elliptic curve pairing failed");
require(result[0] == 1, "failed");
}
function modExpWrapper(
uint256 _b,
uint256 _e,
uint256 _m
) public returns (uint256 result) {
assembly {
// Free memory pointer
let pointer := mload(0x40)
// Define length of base, exponent and modulus. 0x20 == 32 bytes
mstore(pointer, 0x20)
mstore(add(pointer, 0x20), 0x20)
mstore(add(pointer, 0x40), 0x20)
// Define variables base, exponent and modulus
mstore(add(pointer, 0x60), _b)
mstore(add(pointer, 0x80), _e)
mstore(add(pointer, 0xa0), _m)
// Store the result
let value := mload(0xc0)
// Call the precompiled contract 0x05 = bigModExp
if iszero(call(not(0), 0x05, 0, pointer, 0xc0, value, 0x20)) {
revert(0, 0)
}
result := mload(value)
}
}
function modExpVerify(
uint256 _base,
uint256 _exponent,
uint256 _modulus
) public {
lastResult = modExpWrapper(_base, _exponent, _modulus);
}
function getResult() public view returns (uint256) {
return lastResult;
}
function modExpChecker() public {
require(modExpWrapper(3, 5, 7) == 5);
require(modExpWrapper(5, 7, 11) == 3);
}
function blake2Wrapper(
uint32 rounds,
bytes32[2] memory h,
bytes32[4] memory m,
bytes8[2] memory t,
bool f
) public view returns (bytes32[2] memory) {
bytes32[2] memory output;
bytes memory args = abi.encodePacked(
rounds,
h[0],
h[1],
m[0],
m[1],
m[2],
m[3],
t[0],
t[1],
f
);
assembly {
if iszero(
staticcall(not(0), 0x09, add(args, 32), 0xd5, output, 0x40)
) {
revert(0, 0)
}
}
return output;
}
function blake2Check() public {
uint32 rounds = 12;
bytes32[2] memory h;
h[
0
] = hex"48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5";
h[
1
] = hex"d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b";
bytes32[4] memory m;
m[
0
] = hex"6162630000000000000000000000000000000000000000000000000000000000";
m[
1
] = hex"0000000000000000000000000000000000000000000000000000000000000000";
m[
2
] = hex"0000000000000000000000000000000000000000000000000000000000000000";
m[
3
] = hex"0000000000000000000000000000000000000000000000000000000000000000";
bytes8[2] memory t;
t[0] = hex"03000000";
t[1] = hex"00000000";
bool f = true;
// Expected output:
// ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1
// 7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923
bytes32[2] memory result = blake2Wrapper(rounds, h, m, t, f);
require(
result[0] ==
0xba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d1,
"failed"
);
require(
result[1] ==
0x7d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923,
"failed"
);
}
}

View file

@ -4,11 +4,14 @@
*/
import type { GenericContext } from "@moonwall/cli";
import {
ALITH_GENESIS_FREE_BALANCE,
ALITH_GENESIS_LOCK_BALANCE,
ALITH_GENESIS_RESERVE_BALANCE
} from "@moonwall/util";
// DataHaven genesis balance constants
// From operator/runtime/stagenet/src/genesis_config_presets.rs:
// Each endowed account receives: 1u128 << 80
// No locks or reserves are set at genesis
export const ALITH_GENESIS_FREE_BALANCE = 1n << 80n; // 1208925819614629174706176n
export const ALITH_GENESIS_LOCK_BALANCE = 0n;
export const ALITH_GENESIS_RESERVE_BALANCE = 0n;
export const ALITH_GENESIS_TRANSFERABLE_COUNT =
ALITH_GENESIS_FREE_BALANCE + ALITH_GENESIS_RESERVE_BALANCE - ALITH_GENESIS_LOCK_BALANCE;
@ -35,6 +38,27 @@ class RuntimeConstant<T> {
}
}
// Currency units for DataHaven stagenet
// These match the runtime configuration in operator/runtime/stagenet/src/lib.rs
export const HAVE = 1_000_000_000_000_000_000n; // 10^18
export const MICROHAVE = 1_000_000_000_000n; // 10^12
export const SUPPLY_FACTOR = 1n;
export const STORAGE_BYTE_FEE = 100n * MICROHAVE * SUPPLY_FACTOR; // 100_000_000_000_000n
/**
* Calculate deposit cost matching the runtime's deposit() function
* deposit(items, bytes) = items * HAVE * SUPPLY_FACTOR + bytes * STORAGE_BYTE_FEE
*/
export function deposit(items: number, bytes: number): bigint {
return BigInt(items) * HAVE * SUPPLY_FACTOR + BigInt(bytes) * STORAGE_BYTE_FEE;
}
// Identity pallet deposit constants (stagenet)
// Calculated from: operator/runtime/stagenet/src/configs/mod.rs
export const IDENTITY_BASIC_DEPOSIT = deposit(1, 258); // 1_025_800_000_000_000_000n
export const IDENTITY_BYTE_DEPOSIT = deposit(0, 1); // 100_000_000_000_000n
export const IDENTITY_SUB_ACCOUNT_DEPOSIT = deposit(1, 53); // 1_005_300_000_000_000_000n
const DATAHAVEN_CONSTANTS = {
BLOCK_WEIGHT_LIMIT: new RuntimeConstant({
0: 2_000_000_000_000n
@ -57,7 +81,8 @@ const DATAHAVEN_CONSTANTS = {
CALL_PERMIT: "0x000000000000000000000000000000000000080a" as const,
PROXY: "0x000000000000000000000000000000000000080b" as const,
ERC20_BALANCES: "0x0000000000000000000000000000000000000802" as const,
PRECOMPILE_REGISTRY: "0x0000000000000000000000000000000000000815" as const
PRECOMPILE_REGISTRY: "0x0000000000000000000000000000000000000815" as const,
IDENTITY: "0x0000000000000000000000000000000000000818" as const
}
} as const;

View file

@ -8,6 +8,7 @@
export * from "./block";
export * from "./constants";
export { PRECOMPILE_IDENTITY_ADDRESS, PRECOMPILE_PROXY_ADDRESS } from "./precompile-addresses";
export * from "./contracts";
// Export unique functions from eth-transactions that aren't in evm.ts
export { extractRevertReason } from "./eth-transactions";
@ -16,3 +17,5 @@ export * from "./expect";
export * from "./fees";
export * from "./parameters";
export * from "./transactions";
export * from "./modexp";
export * from "./precompile-contract-calls";

View file

@ -0,0 +1,97 @@
/**
* Test vectors for modular exponentiation precompile tests
* Adapted from Moonbeam test helpers
*/
export const testVectors = {
"nagydani-1-square": {
base: "e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5",
exponent: "02",
modulus:
"fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b",
},
"nagydani-1-qube": {
base: "e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5",
exponent: "03",
modulus:
"fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b",
},
"nagydani-1-pow0x10001": {
base: "e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5",
exponent: "010001",
modulus:
"fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b",
},
"nagydani-2-square": {
base: "cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51",
exponent: "02",
modulus:
"e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087",
},
"nagydani-2-qube": {
base: "cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51",
exponent: "03",
modulus:
"e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087",
},
"nagydani-2-pow0x10001": {
base: "cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51",
exponent: "010001",
modulus:
"e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087",
},
"nagydani-3-square": {
base: "c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb",
exponent: "02",
modulus:
"d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d",
},
"nagydani-3-qube": {
base: "c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb",
exponent: "03",
modulus:
"d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d",
},
"nagydani-3-pow0x10001": {
base: "c9130579f243e12451760976261416413742bd7c91d39ae087f46794062b8c239f2a74abf3918605a0e046a7890e049475ba7fbb78f5de6490bd22a710cc04d30088179a919d86c2da62cf37f59d8f258d2310d94c24891be2d7eeafaa32a8cb4b0cfe5f475ed778f45907dc8916a73f03635f233f7a77a00a3ec9ca6761a5bbd558a2318ecd0caa1c5016691523e7e1fa267dd35e70c66e84380bdcf7c0582f540174e572c41f81e93da0b757dff0b0fe23eb03aa19af0bdec3afb474216febaacb8d0381e631802683182b0fe72c28392539850650b70509f54980241dc175191a35d967288b532a7a8223ce2440d010615f70df269501944d4ec16fe4a3cb",
exponent: "010001",
modulus:
"d7a85909174757835187cb52e71934e6c07ef43b4c46fc30bbcd0bc72913068267c54a4aabebb493922492820babdeb7dc9b1558fcf7bd82c37c82d3147e455b623ab0efa752fe0b3a67ca6e4d126639e645a0bf417568adbb2a6a4eef62fa1fa29b2a5a43bebea1f82193a7dd98eb483d09bb595af1fa9c97c7f41f5649d976aee3e5e59e2329b43b13bea228d4a93f16ba139ccb511de521ffe747aa2eca664f7c9e33da59075cc335afcd2bf3ae09765f01ab5a7c3e3938ec168b74724b5074247d200d9970382f683d6059b94dbc336603d1dfee714e4b447ac2fa1d99ecb4961da2854e03795ed758220312d101e1e3d87d5313a6d052aebde75110363d",
},
"nagydani-4-square": {
base: "db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81",
exponent: "02",
modulus:
"df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f",
},
"nagydani-4-qube": {
base: "db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81",
exponent: "03",
modulus:
"df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f",
},
"nagydani-4-pow0x10001": {
base: "db34d0e438249c0ed685c949cc28776a05094e1c48691dc3f2dca5fc3356d2a0663bd376e4712839917eb9a19c670407e2c377a2de385a3ff3b52104f7f1f4e0c7bf7717fb913896693dc5edbb65b760ef1b00e42e9d8f9af17352385e1cd742c9b006c0f669995cb0bb21d28c0aced2892267637b6470d8cee0ab27fc5d42658f6e88240c31d6774aa60a7ebd25cd48b56d0da11209f1928e61005c6eb709f3e8e0aaf8d9b10f7d7e296d772264dc76897ccdddadc91efa91c1903b7232a9e4c3b941917b99a3bc0c26497dedc897c25750af60237aa67934a26a2bc491db3dcc677491944bc1f51d3e5d76b8d846a62db03dedd61ff508f91a56d71028125035c3a44cbb041497c83bf3e4ae2a9613a401cc721c547a2afa3b16a2969933d3626ed6d8a7428648f74122fd3f2a02a20758f7f693892c8fd798b39abac01d18506c45e71432639e9f9505719ee822f62ccbf47f6850f096ff77b5afaf4be7d772025791717dbe5abf9b3f40cff7d7aab6f67e38f62faf510747276e20a42127e7500c444f9ed92baf65ade9e836845e39c4316d9dce5f8e2c8083e2c0acbb95296e05e51aab13b6b8f53f06c9c4276e12b0671133218cc3ea907da3bd9a367096d9202128d14846cc2e20d56fc8473ecb07cecbfb8086919f3971926e7045b853d85a69d026195c70f9f7a823536e2a8f4b3e12e94d9b53a934353451094b81",
exponent: "010001",
modulus:
"df3143a0057457d75e8c708b6337a6f5a4fd1a06727acf9fb93e2993c62f3378b37d56c85e7b1e00f0145ebf8e4095bd723166293c60b6ac1252291ef65823c9e040ddad14969b3b340a4ef714db093a587c37766d68b8d6b5016e741587e7e6bf7e763b44f0247e64bae30f994d248bfd20541a333e5b225ef6a61199e301738b1e688f70ec1d7fb892c183c95dc543c3e12adf8a5e8b9ca9d04f9445cced3ab256f29e998e69efaa633a7b60e1db5a867924ccab0a171d9d6e1098dfa15acde9553de599eaa56490c8f411e4985111f3d40bddfc5e301edb01547b01a886550a61158f7e2033c59707789bf7c854181d0c2e2a42a93cf09209747d7082e147eb8544de25c3eb14f2e35559ea0c0f5877f2f3fc92132c0ae9da4e45b2f6c866a224ea6d1f28c05320e287750fbc647368d41116e528014cc1852e5531d53e4af938374daba6cee4baa821ed07117253bb3601ddd00d59a3d7fb2ef1f5a2fbba7c429f0cf9a5b3462410fd833a69118f8be9c559b1000cc608fd877fb43f8e65c2d1302622b944462579056874b387208d90623fcdaf93920ca7a9e4ba64ea208758222ad868501cc2c345e2d3a5ea2a17e5069248138c8a79c0251185d29ee73e5afab5354769142d2bf0cb6712727aa6bf84a6245fcdae66e4938d84d1b9dd09a884818622080ff5f98942fb20acd7e0c916c2d5ea7ce6f7e173315384518f",
},
"nagydani-5-square": {
base: "c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf",
exponent: "02",
modulus:
"e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad",
},
"nagydani-5-qube": {
base: "c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf",
exponent: "03",
modulus:
"e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad",
},
"nagydani-5-pow0x10001": {
base: "c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf",
exponent: "010001",
modulus:
"e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad",
},
} as const;

View file

@ -0,0 +1,17 @@
/**
* Precompile addresses for DataHaven
* These addresses match Moonbeam's precompile address scheme
*/
export const PRECOMPILE_NATIVE_ERC20_ADDRESS = "0x0000000000000000000000000000000000000802" as const;
export const PRECOMPILE_ERC20_BALANCES_ADDRESS = PRECOMPILE_NATIVE_ERC20_ADDRESS; // Alias
export const PRECOMPILE_BATCH_ADDRESS = "0x0000000000000000000000000000000000000808" as const;
export const PRECOMPILE_CALL_PERMIT_ADDRESS = "0x000000000000000000000000000000000000080a" as const;
export const PRECOMPILE_PROXY_ADDRESS = "0x000000000000000000000000000000000000080b" as const;
export const PRECOMPILE_TREASURY_COUNCIL_ADDRESS = "0x0000000000000000000000000000000000000810" as const;
export const PRECOMPILE_REFERENDA_ADDRESS = "0x0000000000000000000000000000000000000811" as const;
export const PRECOMPILE_CONVICTION_VOTING_ADDRESS = "0x0000000000000000000000000000000000000812" as const;
export const PRECOMPILE_PREIMAGE_ADDRESS = "0x0000000000000000000000000000000000000813" as const;
export const PRECOMPILE_TECHNICAL_COMMITTEE_ADDRESS = "0x0000000000000000000000000000000000000814" as const;
export const PRECOMPILE_REGISTRY_ADDRESS = "0x0000000000000000000000000000000000000815" as const;
export const PRECOMPILE_IDENTITY_ADDRESS = "0x0000000000000000000000000000000000000818" as const;

View file

@ -0,0 +1,136 @@
/**
* Precompile contract call helpers
* Adapted from Moonbeam test suite
*/
import type { BlockCreation, DevModeContext, PrecompileCallOptions } from "@moonwall/cli";
import type { KeyringPair } from "@moonwall/util";
class PrecompileContract {
precompileName: string;
context: DevModeContext;
privateKey?: `0x${string}`;
gas?: bigint | "estimate";
rawTxOnly?: boolean;
signer?: KeyringPair;
expectEvents?: [any];
constructor(precompileName: string, context: DevModeContext) {
this.precompileName = precompileName;
this.context = context;
this.reset();
}
reset() {
this.privateKey = undefined;
this.gas = undefined;
this.rawTxOnly = true;
this.signer = undefined;
this.expectEvents = undefined;
return this;
}
withPrivateKey(privateKey: `0x${string}`) {
this.privateKey = privateKey;
return this;
}
withGas(gas: bigint | "estimate") {
this.gas = gas;
return this;
}
withRawTxOnly(rawTxOnly: boolean) {
if (rawTxOnly === false) {
this.rawTxOnly = undefined;
}
return this;
}
withSigner(signer: KeyringPair) {
this.signer = signer;
return this;
}
withExpectEvents(expectEvents: [any]) {
this.expectEvents = expectEvents;
return this;
}
callExtrinsic(functionName: string, args: any[]): PrecompileCall {
return this.callRpc(functionName, args, true);
}
callQuery(functionName: string, args: any[]): PrecompileCall {
return this.callRpc(functionName, args, false);
}
private callRpc(functionName: string, args: any[], isExtrinsic: boolean): PrecompileCall {
const params = {
precompileName: this.precompileName,
functionName,
args,
privateKey: this.privateKey,
rawTxOnly: this.rawTxOnly,
gas: this.gas,
};
const blockCreationOptions = {
signer: this.signer,
expectEvents: this.expectEvents,
};
if (!isExtrinsic) {
return new ReadPrecompileCall(params, this.context, blockCreationOptions);
}
return new WritePrecompileCall(params, this.context, blockCreationOptions);
}
}
export class PrecompileCall {
params: PrecompileCallOptions;
context: DevModeContext;
blockCreationOptions: BlockCreation;
constructor(
params: PrecompileCallOptions,
context: DevModeContext,
blockCreationOptions: BlockCreation
) {
this.params = params;
this.context = context;
this.blockCreationOptions = blockCreationOptions;
}
async tx(): Promise<unknown> {
throw new Error("Not implemented");
}
async block() {
return await this.context.createBlock((await this.tx()) as any, this.blockCreationOptions);
}
}
class ReadPrecompileCall extends PrecompileCall {
async tx(): Promise<unknown> {
return await this.context.readPrecompile!(this.params);
}
}
class WritePrecompileCall extends PrecompileCall {
async tx(): Promise<unknown> {
return await this.context.writePrecompile!(this.params);
}
}
export class Preimage extends PrecompileContract {
constructor(context: DevModeContext) {
super("Preimage", context);
}
notePreimage(data: string): PrecompileCall {
return this.callExtrinsic("notePreimage", [data]);
}
unnotePreimage(data: string): PrecompileCall {
return this.callExtrinsic("unnotePreimage", [data]);
}
}

View file

@ -0,0 +1,93 @@
/**
* Existential deposit tests
* Adapted from Moonbeam test suite
*/
import { expect, describeSuite, beforeEach, TransactionTypes } from "@moonwall/cli";
import { ALITH_ADDRESS, baltathar, GLMR } from "@moonwall/util";
import { createRawTransfer } from "@moonwall/util";
import { Wallet } from "ethers";
import { ConstantStore } from "../../../../helpers";
describeSuite({
id: "D030203",
title: "Existential Deposit",
foundationMethods: "dev",
testCases: ({ context, log, it }) => {
let privateKey: `0x${string}`;
let randomWeb3Account: any;
let GENESIS_BASE_FEE: bigint;
beforeEach(async function () {
const { specVersion } = await context.polkadotJs().consts.system.version;
GENESIS_BASE_FEE = ConstantStore(context).GENESIS_BASE_FEE.get(specVersion.toNumber());
randomWeb3Account = context.web3().eth.accounts.create();
privateKey = randomWeb3Account.privateKey;
const { result } = await context.createBlock(
context.polkadotJs().tx.balances.transferAllowDeath(randomWeb3Account.address, 10n * GLMR)
);
expect(result!.successful, result!.error?.name).to.be.true;
});
for (const txnType of TransactionTypes) {
it({
id: `T0${TransactionTypes.indexOf(txnType) + 1}`,
title: `full ${txnType} transfer should not reap on 0 account balance`,
test: async function () {
const raw = await createRawTransfer(
context,
ALITH_ADDRESS,
10n * GLMR - 21000n * GENESIS_BASE_FEE,
{
privateKey,
type: txnType,
gasPrice: GENESIS_BASE_FEE,
gas: 21000n,
maxFeePerGas: GENESIS_BASE_FEE,
}
);
const { result } = await context.createBlock(raw);
expect(
await context.viem().getTransactionCount({ address: randomWeb3Account.address })
).toBe(1);
expect(result!.successful, result!.error?.name).toBe(true);
expect(await context.viem().getBalance({ address: randomWeb3Account.address })).toBe(0n);
},
});
}
it({
id: "T04",
title: "should not reap on tiny balance",
test: async function () {
const signer = new Wallet(privateKey, context.ethers().provider);
await signer.sendTransaction({
to: baltathar.address,
value: 10n * GLMR - 21000n * GENESIS_BASE_FEE - 1n,
gasPrice: GENESIS_BASE_FEE,
gasLimit: 21000n,
});
await context.createBlock();
expect(await context.viem().getBalance({ address: randomWeb3Account.address })).toBe(1n);
expect(
await context.viem().getTransactionCount({ address: randomWeb3Account.address })
).toBe(1);
},
});
it({
id: "T05",
title: "runtime constant should be set to zero",
test: async function () {
const existentialDeposit = context
.polkadotJs()
.consts.balances.existentialDeposit.toBigInt();
expect(existentialDeposit).toBe(0n);
},
});
},
});

View file

@ -0,0 +1,87 @@
/**
* Balance extrinsics tests
* Adapted from Moonbeam test suite
*/
import { TransactionTypes, beforeAll, beforeEach, describeSuite, expect } from "@moonwall/cli";
import {
ALITH_ADDRESS,
BALTATHAR_ADDRESS,
GLMR,
createRawTransfer,
mapExtrinsics,
} from "@moonwall/util";
import type { PrivateKeyAccount } from "viem";
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
describeSuite({
id: "D030204",
title: "Balance - Extrinsic Events",
foundationMethods: "dev",
testCases: ({ context, log, it }) => {
let randomAccount: PrivateKeyAccount;
beforeAll(async function () {
// To create the treasury account
await context.createBlock(createRawTransfer(context, BALTATHAR_ADDRESS, 1337));
});
beforeEach(async function () {
const privateKey = generatePrivateKey();
randomAccount = privateKeyToAccount(privateKey);
});
for (const txnType of TransactionTypes) {
it({
id: `T0${TransactionTypes.indexOf(txnType) + 1}`,
title: `should emit events for ${txnType} ethereum/transfers`,
test: async function () {
await context.createBlock(
createRawTransfer(context, randomAccount.address, 1n * GLMR, {
type: txnType,
gas: 500000n,
})
);
const signedBlock = await context.polkadotJs().rpc.chain.getBlock();
const allRecords = await context.polkadotJs().query.system.events();
const txsWithEvents = mapExtrinsics(signedBlock.block.extrinsics, allRecords);
const ethTx = txsWithEvents.find(
({ extrinsic: { method } }) => method.section === "ethereum"
)!;
// Check key events are present
const hasNewAccount = ethTx.events.some((e) =>
context.polkadotJs().events.system.NewAccount.is(e)
);
const hasEndowed = ethTx.events.some((e) =>
context.polkadotJs().events.balances.Endowed.is(e)
);
const hasTransfer = ethTx.events.some((e) =>
context.polkadotJs().events.balances.Transfer.is(e)
);
const hasExecuted = ethTx.events.some((e) =>
context.polkadotJs().events.ethereum.Executed.is(e)
);
const hasSuccess = ethTx.events.some((e) =>
context.polkadotJs().events.system.ExtrinsicSuccess.is(e)
);
expect(hasNewAccount, "NewAccount event should be present").to.be.true;
expect(hasEndowed, "Endowed event should be present").to.be.true;
expect(hasTransfer, "Transfer event should be present").to.be.true;
expect(hasExecuted, "Executed event should be present").to.be.true;
expect(hasSuccess, "ExtrinsicSuccess event should be present").to.be.true;
// Verify transfer event data
const transferEvent = ethTx.events.find((e) =>
context.polkadotJs().events.balances.Transfer.is(e)
)!;
expect(transferEvent.data[0].toString()).to.eq(ALITH_ADDRESS);
expect(transferEvent.data[1].toString()).to.eq(randomAccount.address);
},
});
}
},
});

View file

@ -0,0 +1,38 @@
import "@moonbeam-network/api-augment";
import { expect, describeSuite } from "@moonwall/cli";
import { ALITH_ADDRESS } from "@moonwall/util";
import {
ALITH_GENESIS_FREE_BALANCE,
ALITH_GENESIS_RESERVE_BALANCE,
ALITH_GENESIS_TRANSFERABLE_BALANCE,
} from "../../../../helpers";
describeSuite({
id: "D030201",
title: "Balance genesis",
foundationMethods: "dev",
testCases: ({ context, it }) => {
it({
id: "T01",
title: "should be accessible through web3",
test: async function () {
expect(await context.viem().getBalance({ address: ALITH_ADDRESS })).toBe(
ALITH_GENESIS_TRANSFERABLE_BALANCE
);
},
});
it({
id: "T02",
title: "should be accessible through polkadotJs",
test: async function () {
const genesisHash = await context.polkadotJs().rpc.chain.getBlockHash(0);
const account = await (await context.polkadotJs().at(genesisHash)).query.system.account(
ALITH_ADDRESS
);
expect(account.data.free.toBigInt()).toBe(ALITH_GENESIS_FREE_BALANCE);
expect(account.data.reserved.toBigInt()).toBe(ALITH_GENESIS_RESERVE_BALANCE);
},
});
},
});

View file

@ -0,0 +1,242 @@
import "@moonbeam-network/api-augment";
import { beforeEach, describeSuite, expect } from "@moonwall/cli";
import {
ALITH_ADDRESS,
CHARLETH_ADDRESS,
BALTATHAR_ADDRESS,
BALTATHAR_PRIVATE_KEY,
CHARLETH_PRIVATE_KEY,
FAITH_PRIVATE_KEY,
GLMR,
checkBalance,
createViemTransaction,
createRawTransfer,
generateKeyringPair,
sendRawTransaction,
} from "@moonwall/util";
import {
ALITH_GENESIS_TRANSFERABLE_BALANCE,
ConstantStore,
verifyLatestBlockFees,
} from "../../../../helpers";
import { parseGwei } from "viem";
describeSuite({
id: "D030202",
title: "Balance Transfers",
foundationMethods: "dev",
testCases: ({ context, log, it }) => {
let randomAddress: `0x${string}`;
let GENESIS_BASE_FEE;
beforeEach(async function () {
const randomAccount = generateKeyringPair();
randomAddress = randomAccount.address as `0x${string}`;
const { specVersion } = await context.polkadotJs().consts.system.version;
GENESIS_BASE_FEE = ConstantStore(context).GENESIS_BASE_FEE.get(specVersion.toNumber());
});
it({
id: "T01",
title: "should cost 21000 gas for a transfer",
test: async function () {
const estimatedGas = await context.viem().estimateGas({
account: ALITH_ADDRESS,
value: 0n * GLMR,
to: randomAddress,
});
expect(estimatedGas, "Estimated bal transfer incorrect").toBe(21000n);
await context.createBlock(createRawTransfer(context, randomAddress, 0n));
expect(await context.viem().getBalance({ address: ALITH_ADDRESS })).toBe(
ALITH_GENESIS_TRANSFERABLE_BALANCE - 21000n * GENESIS_BASE_FEE
);
},
});
it({
id: "T02",
title: "unsent txns should be in pending",
test: async function () {
await context.createBlock();
const rawTx = (await createRawTransfer(context, randomAddress, 512n, {
privateKey: CHARLETH_PRIVATE_KEY,
gasPrice: GENESIS_BASE_FEE,
gas: 21000n,
txnType: "legacy",
})) as `0x${string}`;
await sendRawTransaction(context, rawTx);
expect(
await context.viem().getBalance({ address: randomAddress, blockTag: "pending" })
).toBe(512n);
},
});
it({
id: "T03",
title: "should decrease from account",
test: async function () {
const balanceBefore = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
const fees = 21000n * GENESIS_BASE_FEE;
await context.createBlock(
await createRawTransfer(context, randomAddress, 512n, {
gas: 21000n,
gasPrice: GENESIS_BASE_FEE,
txnType: "legacy",
privateKey: CHARLETH_PRIVATE_KEY,
})
);
const balanceAfter = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
expect(balanceBefore - balanceAfter - fees).toBe(512n);
},
});
it({
id: "T04",
title: "should increase to account",
test: async function () {
const balanceBefore = await checkBalance(context, randomAddress);
await context.createBlock(
await createRawTransfer(context, randomAddress, 512n, {
gas: 21000n,
gasPrice: GENESIS_BASE_FEE,
type: "legacy",
})
);
const balanceAfter = await checkBalance(context, randomAddress);
expect(balanceBefore).toBe(0n);
expect(balanceAfter).toBe(512n);
},
});
it({
id: "T05",
title: "should reflect balance identically on polkadot/web3",
test: async function () {
await context.createBlock(
await createRawTransfer(context, randomAddress, 512n, {
gas: 21000n,
gasPrice: GENESIS_BASE_FEE,
type: "legacy",
})
);
const blockNumber = (
await context.polkadotJs().rpc.chain.getBlock()
).block.header.number.toBigInt();
const block1Hash = await context.polkadotJs().rpc.chain.getBlockHash(blockNumber);
const balance = await (await context.polkadotJs().at(block1Hash)).query.system.account(
ALITH_ADDRESS
);
expect(await context.viem().getBalance({ blockNumber, address: ALITH_ADDRESS })).to.equal(
balance.data.free.toBigInt() +
balance.data.reserved.toBigInt() -
balance.data.frozen.toBigInt()
);
},
});
it({
id: "T06",
title: "should check latest block fees",
test: async function () {
await context.createBlock(
await createRawTransfer(context, randomAddress, 512n, {
gas: 21000n,
gasPrice: GENESIS_BASE_FEE,
type: "legacy",
})
);
await verifyLatestBlockFees(context, BigInt(512));
},
});
// NOTE: Uses FAITH_PRIVATE_KEY (aka Frank in DataHaven) instead of GERALD_PRIVATE_KEY
// because Gerald is not endowed at genesis in DataHaven (unlike Moonbeam).
it({
id: "T07",
title: "multiple transfer should be successful",
test: async function () {
const { result } = await context.createBlock([
await createRawTransfer(context, randomAddress, 10n * GLMR, {
privateKey: FAITH_PRIVATE_KEY,
nonce: 0,
}),
await createRawTransfer(context, randomAddress, 10n * GLMR, {
privateKey: FAITH_PRIVATE_KEY,
nonce: 1,
}),
await createRawTransfer(context, randomAddress, 10n * GLMR, {
privateKey: FAITH_PRIVATE_KEY,
nonce: 2,
}),
await createRawTransfer(context, randomAddress, 10n * GLMR, {
privateKey: FAITH_PRIVATE_KEY,
nonce: 3,
}),
await createRawTransfer(context, randomAddress, 10n * GLMR, {
privateKey: FAITH_PRIVATE_KEY,
nonce: 4,
}),
]);
expect((result as any).filter((r: any) => r.successful)).to.be.length(5);
},
});
it({
id: "T08",
title: "should handle max_fee_per_gas",
test: async function () {
const balanceBefore = await checkBalance(context, CHARLETH_ADDRESS);
await context.createBlock(
await createRawTransfer(context, randomAddress, 1n * GLMR, {
gas: 21000n,
maxFeePerGas: GENESIS_BASE_FEE,
maxPriorityFeePerGas: parseGwei("0.2"),
gasPrice: GENESIS_BASE_FEE,
type: "eip1559",
privateKey: CHARLETH_PRIVATE_KEY,
})
);
const balanceAfter = await checkBalance(context, CHARLETH_ADDRESS);
const fee = 21000n * GENESIS_BASE_FEE;
expect(balanceAfter + fee + 1n * GLMR).toBe(balanceBefore);
},
});
it({
id: "T09",
title: "should use partial max_priority_fee_per_gas",
test: async function () {
// With this configuration only half of the priority fee will be used,
// as the max_fee_per_gas is 2GWEI and the base fee is 1GWEI.
const accountData = (await context.polkadotJs().query.system.account(BALTATHAR_ADDRESS))
.data;
const freeBal = accountData.free.toBigInt() - accountData.reserved.toBigInt();
const maxFeePerGas = 10_000_000_000n * 2n;
await context.createBlock(
await createViemTransaction(context, {
privateKey: BALTATHAR_PRIVATE_KEY,
gas: 21000n,
to: randomAddress,
data: "0x",
maxFeePerGas,
maxPriorityFeePerGas: maxFeePerGas,
type: "eip1559",
})
);
const balanceAfter = await checkBalance(context, BALTATHAR_ADDRESS);
const fee = 21_000n * maxFeePerGas;
expect(freeBal - balanceAfter - fee).toBe(0n);
},
});
},
});

View file

@ -0,0 +1,37 @@
/**
* Blake2 precompile tests
* Adapted from Moonbeam test suite
*/
import { deployCreateCompiledContract, describeSuite } from "@moonwall/cli";
import { expectEVMResult } from "../../../../helpers";
import { createViemTransaction } from "@moonwall/util";
import { encodeFunctionData } from "viem";
describeSuite({
id: "D030101",
title: "Precompiles - blake2",
foundationMethods: "dev",
testCases: ({ context, log, it }) => {
it({
id: "T01",
title: "should be accessible from a smart contract",
test: async function () {
const { abi } = await deployCreateCompiledContract(context, "HasherChecker");
// Execute the contract blake2 call
const { result } = await context.createBlock(
createViemTransaction(context, {
data: encodeFunctionData({
abi,
functionName: "blake2Check",
}),
})
);
expectEVMResult(result!.events, "Succeed");
},
});
},
});

View file

@ -0,0 +1,39 @@
/**
* BN128 addition precompile tests
* Adapted from Moonbeam test suite
*/
import { deployCreateCompiledContract, describeSuite } from "@moonwall/cli";
import { createViemTransaction } from "@moonwall/util";
import { encodeFunctionData } from "viem";
import { expectEVMResult } from "../../../../helpers";
describeSuite({
id: "D030102",
title: "Precompiles - bn128add",
foundationMethods: "dev",
testCases: ({ context, it, log }) => {
it({
id: "T01",
title: "should be accessible from a smart contract",
test: async function () {
const { abi, contractAddress } = await deployCreateCompiledContract(
context,
"HasherChecker"
);
const { result } = await context.createBlock(
createViemTransaction(context, {
to: contractAddress,
data: encodeFunctionData({
abi,
functionName: "bn128AdditionCheck",
}),
})
);
expectEVMResult(result!.events, "Succeed");
},
});
},
});

View file

@ -0,0 +1,39 @@
/**
* BN128 multiplication precompile tests
* Adapted from Moonbeam test suite
*/
import { deployCreateCompiledContract, describeSuite } from "@moonwall/cli";
import { createViemTransaction } from "@moonwall/util";
import { encodeFunctionData } from "viem";
import { expectEVMResult } from "../../../../helpers";
describeSuite({
id: "D030103",
title: "Precompiles - bn128mul",
foundationMethods: "dev",
testCases: ({ context, it, log }) => {
it({
id: "T01",
title: "should be accessible from a smart contract",
test: async function () {
const { abi, contractAddress } = await deployCreateCompiledContract(
context,
"HasherChecker"
);
const { result } = await context.createBlock(
createViemTransaction(context, {
to: contractAddress,
data: encodeFunctionData({
abi,
functionName: "bn128MultiplyCheck",
}),
})
);
expectEVMResult(result!.events, "Succeed");
},
});
},
});

View file

@ -0,0 +1,39 @@
/**
* BN128 pairing precompile tests
* Adapted from Moonbeam test suite
*/
import { deployCreateCompiledContract, describeSuite } from "@moonwall/cli";
import { createViemTransaction } from "@moonwall/util";
import { encodeFunctionData } from "viem";
import { expectEVMResult } from "../../../../helpers";
describeSuite({
id: "D030104",
title: "Precompiles - bn128pairing",
foundationMethods: "dev",
testCases: ({ context, it, log }) => {
it({
id: "T01",
title: "should be accessible from a smart contract",
test: async function () {
const { abi, contractAddress } = await deployCreateCompiledContract(
context,
"HasherChecker"
);
const { result } = await context.createBlock(
createViemTransaction(context, {
to: contractAddress,
data: encodeFunctionData({
abi,
functionName: "bn128PairingCheck",
}),
})
);
expectEVMResult(result!.events, "Succeed");
},
});
},
});

View file

@ -0,0 +1,81 @@
/**
* Ecrecover precompile tests
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect } from "@moonwall/cli";
import { ALITH_ADDRESS, ALITH_PRIVATE_KEY } from "@moonwall/util";
describeSuite({
id: "D030107",
title: "Precompiles - ecrecover",
foundationMethods: "dev",
testCases: ({ context, log, it }) => {
let contractAddress: `0x${string}`;
beforeAll(async function () {
const { contractAddress: deployedAddr } = await context.deployContract!("RecoveryChecker");
contractAddress = deployedAddr;
});
it({
id: "T01",
title: "returns a matching address",
test: async function () {
const msg = context.web3().utils.sha3("Hello World!");
const sig = context.web3().eth.accounts.sign(msg!, ALITH_PRIVATE_KEY);
const address = await context.readContract!({
contractAddress,
contractName: "RecoveryChecker",
functionName: "checkRecovery",
args: [sig.messageHash, sig.v, sig.r, sig.s],
});
expect(address, "Recovered address doesn't match signer!").to.equals(ALITH_ADDRESS);
},
});
it({
id: "T02",
title: "returns different address on modified message",
test: async function () {
const msg = context.web3().utils.sha3("Hello World!");
const sig = context.web3().eth.accounts.sign(msg!, ALITH_PRIVATE_KEY);
const address = await context.readContract!({
contractAddress,
contractName: "RecoveryChecker",
functionName: "checkRecovery",
args: [sig.messageHash.replace("1", "f"), sig.v, sig.r, sig.s],
});
expect(address, "Recovered address doesn't match signer!").to.equals(
"0x58188b9AE77F7C865b04B12F5D29bF4fbDcbd937"
);
},
});
it({
id: "T03",
title: "returns empty on invalid V",
test: async function () {
const msg = context.web3().utils.sha3("Hello World!");
const sig = context.web3().eth.accounts.sign(msg!, ALITH_PRIVATE_KEY);
const v = "0x565656ff5656ffffffffffff3d3d02000000000040003dffff565656560f0000";
await expect(
async () =>
await context.readContract!({
contractAddress,
contractName: "RecoveryChecker",
functionName: "checkRecovery",
args: [sig.messageHash, v, sig.r, sig.s],
web3Library: "ethers",
gas: 1_000_000n,
})
).rejects.toThrowError("revert");
},
});
},
});

View file

@ -0,0 +1,31 @@
import "@moonbeam-network/api-augment";
import { describeSuite, expect } from "@moonwall/cli";
import { generateKeyringPair } from "@moonwall/util";
describeSuite({
id: "D030402",
title: "Precompile ERC20 - Transfering through precompile",
foundationMethods: "dev",
testCases: ({ context, it, log }) => {
const randomAccount = generateKeyringPair();
it({
id: "T01",
title: "should not allow overflowing the value",
test: async function () {
await expect(
async () =>
await context.writePrecompile!({
precompileName: "Batch",
functionName: "batchAll",
args: [
[randomAccount.address],
[`${(2n ** 128n + 5_000_000_000_000_000_000n).toString()}`],
[],
[],
],
})
).rejects.toThrowError("evm error: OutOfFund");
},
});
},
});

View file

@ -0,0 +1,291 @@
import "@moonbeam-network/api-augment";
import { beforeEach, describeSuite, expect } from "@moonwall/cli";
import {
ALITH_ADDRESS,
BALTATHAR_ADDRESS,
BALTATHAR_PRIVATE_KEY,
CHARLETH_ADDRESS,
PRECOMPILE_NATIVE_ERC20_ADDRESS,
baltathar,
} from "@moonwall/util";
import { type PrivateKeyAccount, keccak256, pad, parseEther, toBytes, toHex } from "viem";
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
import { ALITH_GENESIS_TRANSFERABLE_BALANCE } from "../../../../helpers";
// const SELECTORS = {
// balanceOf: "70a08231",
// totalSupply: "18160ddd",
// approve: "095ea7b3",
// allowance: "dd62ed3e",
// transfer: "a9059cbb",
// transferFrom: "23b872dd",
// deposit: "d0e30db0",
// logApprove: "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
// logTransfer: "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
// };
// Error(string)
const ABI_REVERT_SELECTOR = "0x08c379a0";
describeSuite({
id: "D030401",
title: "Precompiles - ERC20 Native",
foundationMethods: "dev",
testCases: ({ context, it, log }) => {
let randomAccount: PrivateKeyAccount;
beforeEach(async () => {
randomAccount = privateKeyToAccount(generatePrivateKey());
});
it({
id: "T01",
title: "allows to call getBalance",
test: async function () {
const balance = await context.readPrecompile!({
precompileName: "NativeErc20",
functionName: "balanceOf",
args: [ALITH_ADDRESS],
});
const signedTx = context
.polkadotJs()
.tx.balances.transferAllowDeath(CHARLETH_ADDRESS, 1000)
.signAsync(baltathar);
await context.createBlock(signedTx);
const tx = context.polkadotJs().tx.balances.transferAllowDeath(CHARLETH_ADDRESS, 1000);
await context.createBlock(tx, {
signer: { privateKey: BALTATHAR_PRIVATE_KEY, type: "ethereum" },
});
expect(balance).equals(ALITH_GENESIS_TRANSFERABLE_BALANCE);
},
});
it({
id: "T02",
title: "allows to call totalSupply",
test: async function () {
const totalSupply = await context.readPrecompile!({
precompileName: "NativeErc20",
functionName: "totalSupply",
});
const totalIssuance = (
await context.polkadotJs().query.balances.totalIssuance()
).toBigInt();
expect(totalSupply).toBe(totalIssuance);
},
});
it({
id: "T03",
title: "allows to approve transfers, and allowance matches",
test: async function () {
const allowanceBefore = (await context.readPrecompile!({
precompileName: "NativeErc20",
functionName: "allowance",
args: [ALITH_ADDRESS, BALTATHAR_ADDRESS],
})) as bigint;
const amount = parseEther("10");
const rawTx = await context.writePrecompile!({
precompileName: "NativeErc20",
functionName: "approve",
args: [BALTATHAR_ADDRESS, amount],
rawTxOnly: true,
});
const { result } = await context.createBlock(rawTx);
const allowanceAfter = (await context.readPrecompile!({
precompileName: "NativeErc20",
functionName: "allowance",
args: [ALITH_ADDRESS, BALTATHAR_ADDRESS],
})) as bigint;
expect(allowanceAfter - allowanceBefore).equals(BigInt(amount));
const { status, logs } = await context
.viem()
.getTransactionReceipt({ hash: result?.hash as `0x${string}` });
expect(status).to.equal("success");
expect(logs.length).to.eq(1);
expect(logs[0].topics[0]).toBe(keccak256(toBytes("Approval(address,address,uint256)")));
expect(logs[0].topics[1]?.toLowerCase()).toBe(
pad(ALITH_ADDRESS.toLowerCase() as `0x${string}`)
);
expect(logs[0].topics[2]?.toLowerCase()).toBe(
pad(BALTATHAR_ADDRESS.toLowerCase() as `0x${string}`)
);
},
});
it({
id: "T04",
title: "allows to call transfer",
test: async function () {
expect(
await context.readPrecompile!({
precompileName: "NativeErc20",
functionName: "balanceOf",
args: [randomAccount.address],
})
).equals(0n);
const balanceBefore = await context.viem().getBalance({ address: BALTATHAR_ADDRESS });
const rawTx = await context.writePrecompile!({
precompileName: "NativeErc20",
functionName: "transfer",
args: [randomAccount.address, parseEther("3")],
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
});
const { result } = await context.createBlock(rawTx);
const { status, gasUsed } = await context
.viem()
.getTransactionReceipt({ hash: result?.hash as `0x${string}` });
expect(status).to.equal("success");
const balanceAfter = await context.viem().getBalance({ address: BALTATHAR_ADDRESS });
const block = await context.viem().getBlock();
const fees = gasUsed * block.baseFeePerGas!;
expect(balanceAfter).toBeLessThanOrEqual(balanceBefore - parseEther("3") - fees);
expect(await context.viem().getBalance({ address: randomAccount.address })).to.equal(
parseEther("3")
);
},
});
it({
id: "T05",
title: "allows to approve transfer and use transferFrom",
test: async function () {
const allowedAmount = parseEther("10");
const transferAmount = parseEther("5");
await context.writePrecompile!({
precompileName: "NativeErc20",
functionName: "approve",
args: [BALTATHAR_ADDRESS, allowedAmount],
});
await context.createBlock();
const fromBalBefore = (
await context.polkadotJs().query.system.account(ALITH_ADDRESS)
).data.free.toBigInt();
const toBalBefore = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
const rawTx = await context.writePrecompile!({
precompileName: "NativeErc20",
functionName: "transferFrom",
args: [ALITH_ADDRESS, CHARLETH_ADDRESS, transferAmount],
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
});
const { result } = await context.createBlock(rawTx);
const { logs, status } = await context
.viem()
.getTransactionReceipt({ hash: result?.hash as `0x${string}` });
const fromBalAfter = (
await context.polkadotJs().query.system.account(ALITH_ADDRESS)
).data.free.toBigInt();
const toBalAfter = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
expect(logs.length).to.eq(1);
expect(logs[0].address).to.eq(PRECOMPILE_NATIVE_ERC20_ADDRESS);
expect(logs[0].data).to.eq(pad(toHex(transferAmount)));
expect(logs[0].topics.length).to.eq(3);
expect(logs[0].topics[0]).toBe(keccak256(toBytes("Transfer(address,address,uint256)")));
expect(logs[0].topics[1]?.toLowerCase()).toBe(
pad(ALITH_ADDRESS.toLowerCase() as `0x${string}`)
);
expect(logs[0].topics[2]?.toLowerCase()).toBe(
pad(CHARLETH_ADDRESS.toLowerCase() as `0x${string}`)
);
expect(status).to.equal("success");
expect(toBalAfter).toBe(toBalBefore + transferAmount);
expect(fromBalAfter).toBe(fromBalBefore - transferAmount);
const newAllowedAmount = allowedAmount - transferAmount;
expect(
await context.readPrecompile!({
precompileName: "NativeErc20",
functionName: "allowance",
args: [ALITH_ADDRESS, BALTATHAR_ADDRESS],
})
).toBe(newAllowedAmount);
},
});
it({
id: "T06",
title: "refuses to transferFrom more than allowed",
test: async function () {
const allowedAmount = parseEther("10");
const transferAmount = parseEther("15");
await context.writePrecompile!({
precompileName: "NativeErc20",
functionName: "approve",
args: [BALTATHAR_ADDRESS, allowedAmount],
});
await context.createBlock();
const fromBalBefore = (
await context.polkadotJs().query.system.account(ALITH_ADDRESS)
).data.free.toBigInt();
const toBalBefore = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
const rawTxn = await context.writePrecompile!({
precompileName: "NativeErc20",
functionName: "transferFrom",
args: [ALITH_ADDRESS, CHARLETH_ADDRESS, transferAmount],
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
gas: 200_000n,
web3Library: "ethers",
});
const { result } = await context.createBlock(rawTxn);
expect(result?.successful).toBe(false);
const fromBalAfter = (
await context.polkadotJs().query.system.account(ALITH_ADDRESS)
).data.free.toBigInt();
const toBalAfter = await context.viem().getBalance({ address: CHARLETH_ADDRESS });
expect(toBalAfter).toBe(toBalBefore);
expect(fromBalAfter).toBe(fromBalBefore);
expect(
await context.readPrecompile!({
precompileName: "NativeErc20",
functionName: "allowance",
args: [ALITH_ADDRESS, BALTATHAR_ADDRESS],
})
).toBe(allowedAmount);
},
});
},
});
// describeDevMoonbeamAllEthTxTypes("Precompiles - ERC20 Native", (context) => {
// it("revert message is abi-encoded as a String(error) call", async function () {
// const request = await web3EthCall(context.web3, {
// to: PRECOMPILE_NATIVE_ERC20_ADDRESS,
// data: `0x${SELECTORS.deposit}`,
// });
// expect(request as any).to.haveOwnProperty("error");
// // Data
// let data = (request as any).error.data;
// expect(data.length).to.be.eq(266);
// expect(data.slice(0, 10)).to.be.eq(ABI_REVERT_SELECTOR);
// // Message
// expect((request as any).error.message).to.be.eq(
// "VM Exception while processing transaction: revert deposited amount must be non-zero"
// );
// });
// });

View file

@ -0,0 +1,116 @@
/**
* Identity precompile tests - retrieve registrars and identity
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect } from "@moonwall/cli";
import { alith, baltathar } from "@moonwall/util";
import { toHex } from "viem";
import { PRECOMPILE_IDENTITY_ADDRESS } from "../../../../helpers";
describeSuite({
id: "D030301",
title: "Precompiles - Identity precompile",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.sudo.sudo(context.polkadotJs().tx.identity.addRegistrar(alith.address))
);
await context.createBlock(context.polkadotJs().tx.identity.setFee(0, 100));
await context.createBlock(
// With 0b111 we are indicating the pallet to use "Display", "Legal" and "Web" fields.
context
.polkadotJs()
.tx.identity.setFields(0, 0b111 as any)
);
await context.createBlock(
context
.polkadotJs()
.tx.identity.setIdentity({
additional: [[{ raw: "discord" }, { raw: "my-discord" }]],
display: { raw: "display" },
legal: { raw: "legal" },
web: { raw: "web" },
riot: { raw: "riot" },
email: { raw: "email" },
pgpFingerprint: new Array(20).fill(1),
image: { raw: "image" },
twitter: { raw: "twitter" },
})
.signAsync(baltathar)
);
});
it({
id: "T01",
title: "should retrieve registrars",
test: async function () {
const registrars = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "registrars",
args: [],
})) as any;
expect(registrars.length).to.equal(1);
expect(registrars[0].isValid).to.be.true;
expect(registrars[0].index).to.equal(0);
expect(registrars[0].account).to.equal(alith.address);
expect(registrars[0].fee).to.equal(100n);
expect(registrars[0].fields.display).to.be.true;
expect(registrars[0].fields.web).to.be.true;
expect(registrars[0].fields.legal).to.be.true;
expect(registrars[0].fields.riot).to.be.false;
expect(registrars[0].fields.email).to.be.false;
expect(registrars[0].fields.pgpFingerprint).to.be.false;
expect(registrars[0].fields.image).to.be.false;
expect(registrars[0].fields.twitter).to.be.false;
},
});
it({
id: "T02",
title: "should retrieve identity",
test: async function () {
const identity = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "identity",
args: [baltathar.address],
})) as any;
expect(identity.isValid).to.be.true;
expect(identity.judgements).to.be.empty;
expect(identity.deposit).to.equal(1034200000000000000n);
expect(identity.info.additional.length).to.equal(1);
expect(identity.info.additional[0].key.hasData).to.be.true;
expect(identity.info.additional[0].key.value).to.equal(toHex("discord"));
expect(identity.info.additional[0].value.hasData).to.be.true;
expect(identity.info.additional[0].value.value).to.equal(toHex("my-discord"));
expect(identity.info.display.hasData).to.be.true;
expect(identity.info.display.value).to.equal(toHex("display"));
expect(identity.info.legal.hasData).to.be.true;
expect(identity.info.legal.value).to.equal(toHex("legal"));
expect(identity.info.web.hasData).to.be.true;
expect(identity.info.web.value).to.equal(toHex("web"));
expect(identity.info.riot.hasData).to.be.true;
expect(identity.info.riot.value).to.equal(toHex("riot"));
expect(identity.info.email.hasData).to.be.true;
expect(identity.info.email.value).to.equal(toHex("email"));
expect(identity.info.hasPgpFingerprint).to.be.true;
expect(identity.info.pgpFingerprint).to.equal(
toHex(Uint8Array.from(new Array(20).fill(1)))
);
expect(identity.info.image.hasData).to.be.true;
expect(identity.info.image.value).to.equal(toHex("image"));
expect(identity.info.twitter.hasData).to.be.true;
expect(identity.info.twitter.value).to.equal(toHex("twitter"));
},
});
},
});

View file

@ -0,0 +1,61 @@
/**
* Identity precompile tests - set account id
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect } from "@moonwall/cli";
import { alith, charleth } from "@moonwall/util";
import { expectEVMResult, PRECOMPILE_IDENTITY_ADDRESS } from "../../../../helpers";
describeSuite({
id: "D030310",
title: "Precompiles - Identity precompile - set account id",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.sudo.sudo(context.polkadotJs().tx.identity.addRegistrar(alith.address))
);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "setAccountId",
rawTxOnly: true,
args: [0, charleth.address],
})
);
expectEVMResult(block.result!.events, "Succeed");
});
it({
id: "T01",
title: "should retrieve the registrar",
test: async function () {
const registrars = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "registrars",
})) as any;
expect(registrars.length).to.equal(1);
expect(registrars[0].isValid).to.be.true;
expect(registrars[0].index).to.equal(0);
expect(registrars[0].account).to.equal(charleth.address);
expect(registrars[0].fee).to.equal(0n);
expect(registrars[0].fields.display).to.be.false;
expect(registrars[0].fields.web).to.be.false;
expect(registrars[0].fields.legal).to.be.false;
expect(registrars[0].fields.riot).to.be.false;
expect(registrars[0].fields.email).to.be.false;
expect(registrars[0].fields.pgpFingerprint).to.be.false;
expect(registrars[0].fields.image).to.be.false;
expect(registrars[0].fields.twitter).to.be.false;
},
});
},
});

View file

@ -0,0 +1,95 @@
/**
* Identity precompile tests - add sub
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
import { BALTATHAR_PRIVATE_KEY, baltathar, charleth } from "@moonwall/util";
import { decodeEventLog, toHex } from "viem";
import {
PRECOMPILE_IDENTITY_ADDRESS,
expectEVMResult,
expectSubstrateEvent,
} from "../../../../helpers";
describeSuite({
id: "D030311",
title: "Precompiles - Identity precompile - add sub",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.identity.setIdentity({
display: { raw: "display" },
})
.signAsync(baltathar)
);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "addSub",
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
args: [
charleth.address,
{
hasData: true,
value: toHex("test"),
},
],
})
);
expectEVMResult(block.result!.events, "Succeed");
const { data } = expectSubstrateEvent(block, "evm", "Log");
const evmLog = decodeEventLog({
abi: fetchCompiledContract("Identity").abi,
topics: data[0].topics.map((t) => t.toHex()) as any,
data: data[0].data.toHex(),
}) as any;
expect(evmLog.eventName).to.equal("SubIdentityAdded");
expect(evmLog.args.sub).to.equal(charleth.address);
expect(evmLog.args.main).to.equal(baltathar.address);
});
it({
id: "T01",
title: "should retrieve subs",
test: async function () {
const subs = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "subsOf",
args: [baltathar.address],
})) as any;
expect(subs.deposit).to.equal(1005300000000000000n);
expect(subs.accounts).to.have.length(1);
expect(subs.accounts[0]).to.be.equal(charleth.address);
},
});
it({
id: "T02",
title: "should retrieve super",
test: async function () {
const superOf = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "superOf",
args: [charleth.address],
})) as any;
expect(superOf.isValid).to.be.true;
expect(superOf.account).to.be.equal(baltathar.address);
expect(superOf.data.hasData).to.be.true;
expect(superOf.data.value).to.be.equal(toHex("test"));
},
});
},
});

View file

@ -0,0 +1,87 @@
/**
* Identity precompile tests - rename sub
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect } from "@moonwall/cli";
import { BALTATHAR_PRIVATE_KEY, baltathar, charleth } from "@moonwall/util";
import { toHex } from "viem";
import { PRECOMPILE_IDENTITY_ADDRESS, expectEVMResult } from "../../../../helpers";
describeSuite({
id: "D030312",
title: "Precompiles - Identity precompile - rename sub",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.identity.setIdentity({
display: { raw: "display" },
})
.signAsync(baltathar)
);
await context.createBlock(
context
.polkadotJs()
.tx.identity.addSub(charleth.address, { Raw: "test" })
.signAsync(baltathar)
);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "renameSub",
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
args: [
charleth.address,
{
hasData: true,
value: toHex("foobar"),
},
],
})
);
expectEVMResult(block.result!.events, "Succeed");
});
it({
id: "T01",
title: "should retrieve subs",
test: async function () {
const subs = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "subsOf",
args: [baltathar.address],
})) as any;
expect(subs.deposit).to.equal(1005300000000000000n);
expect(subs.accounts).to.have.length(1);
expect(subs.accounts[0]).to.be.equal(charleth.address);
},
});
it({
id: "T02",
title: "should retrieve super",
test: async function () {
const superOf = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "superOf",
args: [charleth.address],
})) as any;
expect(superOf.isValid).to.be.true;
expect(superOf.account).to.be.equal(baltathar.address);
expect(superOf.data.hasData).to.be.true;
expect(superOf.data.value).to.be.equal(toHex("foobar"));
},
});
},
});

View file

@ -0,0 +1,76 @@
/**
* Identity precompile tests - remove sub
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
import { BALTATHAR_PRIVATE_KEY, baltathar, charleth } from "@moonwall/util";
import { decodeEventLog } from "viem";
import {
PRECOMPILE_IDENTITY_ADDRESS,
expectEVMResult,
expectSubstrateEvent,
} from "../../../../helpers";
describeSuite({
id: "D030313",
title: "Precompiles - Identity precompile - remove sub",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.identity.setIdentity({
display: { raw: "display" },
})
.signAsync(baltathar)
);
await context.createBlock(
context
.polkadotJs()
.tx.identity.addSub(charleth.address, { Raw: "test" })
.signAsync(baltathar)
);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "removeSub",
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
args: [charleth.address],
})
);
expectEVMResult(block.result!.events, "Succeed");
const { data } = expectSubstrateEvent(block, "evm", "Log");
const evmLog = decodeEventLog({
abi: fetchCompiledContract("Identity").abi,
topics: data[0].topics.map((t) => t.toHex()) as any,
data: data[0].data.toHex(),
}) as any;
expect(evmLog.eventName).to.equal("SubIdentityRemoved");
expect(evmLog.args.sub).to.equal(charleth.address);
expect(evmLog.args.main).to.equal(baltathar.address);
});
it({
id: "T01",
title: "should have no subs",
test: async function () {
const subs = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "subsOf",
args: [baltathar.address],
})) as any;
expect(subs.deposit).to.be.equal(0n);
expect(subs.accounts).to.be.empty;
},
});
},
});

View file

@ -0,0 +1,73 @@
/**
* Identity precompile tests - quit sub
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
import { CHARLETH_PRIVATE_KEY, baltathar, charleth } from "@moonwall/util";
import { decodeEventLog } from "viem";
import {
PRECOMPILE_IDENTITY_ADDRESS,
expectEVMResult,
expectSubstrateEvent,
} from "../../../../helpers";
describeSuite({
id: "D030314",
title: "Precompiles - Identity precompile - quit sub",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.identity.setIdentity({
display: { raw: "display" },
})
.signAsync(baltathar)
);
await context.createBlock(
context
.polkadotJs()
.tx.identity.addSub(charleth.address, { Raw: "test" })
.signAsync(baltathar)
);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "quitSub",
privateKey: CHARLETH_PRIVATE_KEY,
rawTxOnly: true,
})
);
expectEVMResult(block.result!.events, "Succeed");
const { data } = expectSubstrateEvent(block, "evm", "Log");
const evmLog = decodeEventLog({
abi: fetchCompiledContract("Identity").abi,
topics: data[0].topics.map((t) => t.toHex()) as any,
data: data[0].data.toHex(),
}) as any;
expect(evmLog.eventName).to.equal("SubIdentityRevoked");
expect(evmLog.args.sub).to.equal(charleth.address);
});
it({
id: "T01",
title: "should have no super",
test: async function () {
const superOf = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "superOf",
args: [charleth.address],
})) as any;
expect(superOf.isValid).to.be.false;
},
});
},
});

View file

@ -0,0 +1,102 @@
/**
* Identity precompile tests - set identity
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
import { BALTATHAR_PRIVATE_KEY, baltathar } from "@moonwall/util";
import { decodeEventLog, toHex } from "viem";
import {
PRECOMPILE_IDENTITY_ADDRESS,
expectEVMResult,
expectSubstrateEvent,
} from "../../../../helpers";
describeSuite({
id: "D030302",
title: "Precompiles - Identity precompile - set identity",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "setIdentity",
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
args: [
{
additional: [
{
key: { hasData: true, value: toHex("discord") },
value: { hasData: true, value: toHex("my-discord") },
},
],
display: { hasData: true, value: toHex("display") },
legal: { hasData: true, value: toHex("legal") },
web: { hasData: true, value: toHex("web") },
riot: { hasData: true, value: toHex("riot") },
email: { hasData: true, value: toHex("email") },
hasPgpFingerprint: true,
pgpFingerprint: toHex(Uint8Array.from(new Array(20).fill(1))),
image: { hasData: true, value: toHex("image") },
twitter: { hasData: true, value: toHex("twitter") },
},
],
})
);
expectEVMResult(block.result!.events, "Succeed");
const { data } = expectSubstrateEvent(block, "evm", "Log");
const evmLog = decodeEventLog({
abi: fetchCompiledContract("Identity").abi,
topics: data[0].topics.map((t) => t.toHex()) as any,
data: data[0].data.toHex(),
}) as any;
expect(evmLog.eventName).to.equal("IdentitySet");
expect(evmLog.args.who).to.equal(baltathar.address);
});
it({
id: "T01",
title: "should retrieve newly set identity",
test: async function () {
const identity = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "identity",
args: [baltathar.address],
})) as any;
expect(identity.isValid).to.be.true;
expect(identity.judgements).to.be.empty;
expect(identity.deposit).to.equal(1034200000000000000n);
expect(identity.info.additional.length).to.equal(1);
expect(identity.info.additional[0].key.hasData).to.be.true;
expect(identity.info.additional[0].key.value).to.equal(toHex("discord"));
expect(identity.info.additional[0].value.hasData).to.be.true;
expect(identity.info.additional[0].value.value).to.equal(toHex("my-discord"));
expect(identity.info.display.hasData).to.be.true;
expect(identity.info.display.value).to.equal(toHex("display"));
expect(identity.info.legal.hasData).to.be.true;
expect(identity.info.legal.value).to.equal(toHex("legal"));
expect(identity.info.web.hasData).to.be.true;
expect(identity.info.web.value).to.equal(toHex("web"));
expect(identity.info.riot.hasData).to.be.true;
expect(identity.info.riot.value).to.equal(toHex("riot"));
expect(identity.info.email.hasData).to.be.true;
expect(identity.info.email.value).to.equal(toHex("email"));
expect(identity.info.hasPgpFingerprint).to.be.true;
expect(identity.info.pgpFingerprint).to.equal(
toHex(Uint8Array.from(new Array(20).fill(1)))
);
expect(identity.info.image.hasData).to.be.true;
expect(identity.info.image.value).to.equal(toHex("image"));
expect(identity.info.twitter.hasData).to.be.true;
expect(identity.info.twitter.value).to.equal(toHex("twitter"));
},
});
},
});

View file

@ -0,0 +1,67 @@
/**
* Identity precompile tests - clear identity
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
import { BALTATHAR_PRIVATE_KEY, baltathar } from "@moonwall/util";
import { decodeEventLog } from "viem";
import {
PRECOMPILE_IDENTITY_ADDRESS,
expectEVMResult,
expectSubstrateEvent,
} from "../../../../helpers";
describeSuite({
id: "D030303",
title: "Precompiles - Identity precompile - clear identity",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock([
context
.polkadotJs()
.tx.identity.setIdentity({
display: { raw: "display" },
})
.signAsync(baltathar),
]);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "clearIdentity",
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
})
);
expectEVMResult(block.result!.events, "Succeed");
const { data } = expectSubstrateEvent(block, "evm", "Log");
const evmLog = decodeEventLog({
abi: fetchCompiledContract("Identity").abi,
topics: data[0].topics.map((t) => t.toHex()) as any,
data: data[0].data.toHex(),
}) as any;
expect(evmLog.eventName).to.equal("IdentityCleared");
expect(evmLog.args.who).to.equal(baltathar.address);
});
it({
id: "T01",
title: "should have no identity",
test: async function () {
const identity = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "identity",
args: [baltathar.address],
})) as any;
expect(identity.isValid).to.be.false;
},
});
},
});

View file

@ -0,0 +1,82 @@
/**
* Identity precompile tests - request judgement
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
import { BALTATHAR_PRIVATE_KEY, alith, baltathar } from "@moonwall/util";
import { decodeEventLog, toHex } from "viem";
import {
PRECOMPILE_IDENTITY_ADDRESS,
expectEVMResult,
expectSubstrateEvent,
} from "../../../../helpers";
describeSuite({
id: "D030304",
title: "Precompiles - Identity precompile - request judgement",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.sudo.sudo(context.polkadotJs().tx.identity.addRegistrar(alith.address))
);
await context.createBlock([
context.polkadotJs().tx.identity.setFee(0, 100n),
context
.polkadotJs()
.tx.identity.setIdentity({
display: { raw: "display" },
})
.signAsync(baltathar),
]);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "requestJudgement",
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
args: [0, 100],
})
);
expectEVMResult(block.result!.events, "Succeed");
const { data } = expectSubstrateEvent(block, "evm", "Log");
const evmLog = decodeEventLog({
abi: fetchCompiledContract("Identity").abi,
topics: data[0].topics.map((t) => t.toHex()) as any,
data: data[0].data.toHex(),
}) as any;
expect(evmLog.eventName).to.equal("JudgementRequested");
expect(evmLog.args.who).to.equal(baltathar.address);
expect(evmLog.args.registrarIndex).to.equal(0);
});
it({
id: "T01",
title: "should retrieve requested judgement as part of identity",
test: async function () {
const identity = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "identity",
args: [baltathar.address],
})) as any;
expect(identity.isValid).to.be.true;
expect(identity.judgements).to.have.length(1);
expect(identity.judgements[0].registrarIndex).to.equal(0);
expect(identity.judgements[0].judgement.isFeePaid).to.be.true;
expect(identity.judgements[0].judgement.feePaidDeposit).to.equal(100n);
expect(identity.deposit).to.equal(1027400000000000000n);
expect(identity.info.display.hasData).to.be.true;
expect(identity.info.display.value).to.equal(toHex("display"));
},
});
},
});

View file

@ -0,0 +1,82 @@
/**
* Identity precompile tests - cancel requested judgement
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
import { BALTATHAR_PRIVATE_KEY, alith, baltathar } from "@moonwall/util";
import { decodeEventLog, toHex } from "viem";
import {
PRECOMPILE_IDENTITY_ADDRESS,
expectEVMResult,
expectSubstrateEvent,
} from "../../../../helpers";
describeSuite({
id: "D030305",
title: "Precompiles - Identity precompile - cancel requested judgement",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.sudo.sudo(context.polkadotJs().tx.identity.addRegistrar(alith.address))
);
await context.createBlock([
context.polkadotJs().tx.identity.setFee(0, 100n),
context
.polkadotJs()
.tx.identity.setIdentity({
display: { raw: "display" },
})
.signAsync(baltathar),
]);
await context.createBlock(
context.polkadotJs().tx.identity.requestJudgement(0, 1000n).signAsync(baltathar)
);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "cancelRequest",
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
args: [0],
})
);
expectEVMResult(block.result!.events, "Succeed");
const { data } = expectSubstrateEvent(block, "evm", "Log");
const evmLog = decodeEventLog({
abi: fetchCompiledContract("Identity").abi,
topics: data[0].topics.map((t) => t.toHex()) as any,
data: data[0].data.toHex(),
}) as any;
expect(evmLog.eventName).to.equal("JudgementUnrequested");
expect(evmLog.args.who).to.equal(baltathar.address);
expect(evmLog.args.registrarIndex).to.equal(0);
});
it({
id: "T01",
title: "should have no requested judgement as part of identity",
test: async function () {
const identity = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "identity",
args: [baltathar.address],
})) as any;
expect(identity.isValid).to.be.true;
expect(identity.judgements).to.be.empty;
expect(identity.deposit).to.equal(1027400000000000000n);
expect(identity.info.display.hasData).to.be.true;
expect(identity.info.display.value).to.equal(toHex("display"));
},
});
},
});

View file

@ -0,0 +1,98 @@
/**
* Identity precompile tests - provide judgement
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect, fetchCompiledContract } from "@moonwall/cli";
import { alith, baltathar } from "@moonwall/util";
import { decodeEventLog, toHex } from "viem";
import {
PRECOMPILE_IDENTITY_ADDRESS,
expectEVMResult,
expectSubstrateEvent,
} from "../../../../helpers";
describeSuite({
id: "D030306",
title: "Precompiles - Identity precompile - provide judgement",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.sudo.sudo(context.polkadotJs().tx.identity.addRegistrar(alith.address))
);
const identityData = {
display: { raw: "display" },
};
await context.createBlock([
context.polkadotJs().tx.identity.setFee(0, 100n),
context.polkadotJs().tx.identity.setIdentity(identityData).signAsync(baltathar),
]);
await context.createBlock(
context.polkadotJs().tx.identity.requestJudgement(0, 1000n).signAsync(baltathar)
);
const identityHash = context
.polkadotJs()
.registry.createType("PalletIdentityLegacyIdentityInfo", identityData)
.hash.toHex();
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "provideJudgement",
rawTxOnly: true,
args: [
0,
baltathar.address,
{
isUnknown: false,
isFeePaid: false,
feePaidDeposit: 0,
isReasonable: false,
isKnownGood: true,
isOutOfDate: false,
isLowQuality: false,
isErroneous: false,
},
identityHash,
],
})
);
expectEVMResult(block.result!.events, "Succeed");
const { data } = expectSubstrateEvent(block, "evm", "Log");
const evmLog = decodeEventLog({
abi: fetchCompiledContract("Identity").abi,
topics: data[0].topics.map((t) => t.toHex()) as any,
data: data[0].data.toHex(),
}) as any;
expect(evmLog.eventName).to.equal("JudgementGiven");
expect(evmLog.args.target).to.equal(baltathar.address);
expect(evmLog.args.registrarIndex).to.equal(0);
});
it({
id: "T01",
title: "should have provided judgement as part of identity",
test: async function () {
const identity = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "identity",
args: [baltathar.address],
})) as any;
expect(identity.isValid).to.be.true;
expect(identity.judgements).to.have.length(1);
expect(identity.judgements[0].judgement.isKnownGood).to.be.true;
expect(identity.deposit).to.equal(1027400000000000000n);
expect(identity.info.display.hasData).to.be.true;
expect(identity.info.display.value).to.equal(toHex("display"));
},
});
},
});

View file

@ -0,0 +1,82 @@
/**
* Identity precompile tests - set subs
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect } from "@moonwall/cli";
import { BALTATHAR_PRIVATE_KEY, baltathar, charleth } from "@moonwall/util";
import { toHex } from "viem";
import { PRECOMPILE_IDENTITY_ADDRESS, expectEVMResult } from "../../../../helpers";
describeSuite({
id: "D030307",
title: "Precompiles - Identity precompile - set subs",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.identity.setIdentity({
display: { raw: "display" },
})
.signAsync(baltathar)
);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "setSubs",
privateKey: BALTATHAR_PRIVATE_KEY,
rawTxOnly: true,
args: [
[
{
account: charleth.address,
data: { hasData: true, value: toHex("test") },
},
],
],
})
);
expectEVMResult(block.result!.events, "Succeed");
});
it({
id: "T01",
title: "should retrieve subs",
test: async function () {
const subs = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "subsOf",
args: [baltathar.address],
})) as any;
expect(subs.deposit).to.equal(1005300000000000000n);
expect(subs.accounts).to.have.length(1);
expect(subs.accounts[0]).to.be.equal(charleth.address);
},
});
it({
id: "T02",
title: "should retrieve super",
test: async function () {
const superOf = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "superOf",
args: [charleth.address],
})) as any;
expect(superOf.isValid).to.be.true;
expect(superOf.account).to.be.equal(baltathar.address);
expect(superOf.data.hasData).to.be.true;
expect(superOf.data.value).to.be.equal(toHex("test"));
},
});
},
});

View file

@ -0,0 +1,61 @@
/**
* Identity precompile tests - set fee
* Adapted from Moonbeam test suite
*/
import { beforeAll, describeSuite, expect } from "@moonwall/cli";
import { alith } from "@moonwall/util";
import { expectEVMResult, PRECOMPILE_IDENTITY_ADDRESS } from "../../../../helpers";
describeSuite({
id: "D030308",
title: "Precompiles - Identity precompile - set fee",
foundationMethods: "dev",
testCases: ({ it, log, context }) => {
beforeAll(async function () {
await context.createBlock(
context
.polkadotJs()
.tx.sudo.sudo(context.polkadotJs().tx.identity.addRegistrar(alith.address))
);
const block = await context.createBlock(
await context.writeContract!({
contractName: "Identity",
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
functionName: "setFee",
rawTxOnly: true,
args: [0, 100],
})
);
expectEVMResult(block.result!.events, "Succeed");
});
it({
id: "T01",
title: "should retrieve the registrar",
test: async function () {
const registrars = (await context.readContract!({
contractAddress: PRECOMPILE_IDENTITY_ADDRESS,
contractName: "Identity",
functionName: "registrars",
})) as any;
expect(registrars.length).to.equal(1);
expect(registrars[0].isValid).to.be.true;
expect(registrars[0].index).to.equal(0);
expect(registrars[0].account).to.equal(alith.address);
expect(registrars[0].fee).to.equal(100n);
expect(registrars[0].fields.display).to.be.false;
expect(registrars[0].fields.web).to.be.false;
expect(registrars[0].fields.legal).to.be.false;
expect(registrars[0].fields.riot).to.be.false;
expect(registrars[0].fields.email).to.be.false;
expect(registrars[0].fields.pgpFingerprint).to.be.false;
expect(registrars[0].fields.image).to.be.false;
expect(registrars[0].fields.twitter).to.be.false;
},
});
},
});

Some files were not shown because too many files have changed in this diff Show more