FrothMemeProtocolDeployer04

0xbe3b7aadbee8dbe71f0bfb4640a43dd8aaab59c9

Verification
Verified
v0.8.28+commit.7893614a
Type
Contract
15,954 bytes
ABI entries
19
15 read · 2 write
License
none

Contract information

Address
0xbe3b7aadbee8dbe71f0bfb4640a43dd8aaab59c9
Chain
Robinhood Chain (4663)
Compiler
v0.8.28+commit.7893614a
Optimization
Enabled
Creation tx
0x55ee405321…fd41960015

Token

Not a token

This contract does not expose ERC-20 metadata.

Read contract (15)

BPS_DENOMINATOR()uint256
CREATE_MEME_TOKEN_FEE_KEY()bytes32
CREATOR_FEES_ON_BUYING_KEY()bytes32
CREATOR_FEES_ON_SELLING_KEY()bytes32
DEFAULT_MIN_CONTRIBUTION_AMOUNT()uint256
GRADUATION_FEE_KEY()bytes32
MAX_TOTAL_CONTRIBUTION()uint256
MEME_TOKEN_CAP()uint256
MEME_TOKEN_LIQUIDITY_AMOUNT()uint256
RUG_FEE_KEY()bytes32
TRADE_BUY_FEE_KEY()bytes32
TRADE_SELL_FEE_KEY()bytes32
printOutputParams(tuple)
toString(uint256)string
toString(bytes32)string

ABI

[
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "length",
        "type": "uint256"
      }
    ],
    "name": "StringsInsufficientHexLength",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "caller",
        "type": "address"
      }
    ],
    "name": "UnauthorizedOrchestrator",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "BPS_DENOMINATOR",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "CREATE_MEME_TOKEN_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "CREATOR_FEES_ON_BUYING_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "CREATOR_FEES_ON_SELLING_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DEFAULT_MIN_CONTRIBUTION_AMOUNT",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "GRADUATION_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MAX_TOTAL_CONTRIBUTION",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MEME_TOKEN_CAP",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MEME_TOKEN_LIQUIDITY_AMOUNT",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "RUG_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "TRADE_BUY_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "TRADE_SELL_FEE_KEY",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "initialAdminAndOperator",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.BondingCurveFactoryParams",
            "name": "bondingCurveFactoryParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "initialVirtualNative",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "initialVirtualTokens",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "maxTokensSold",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "targetGraduation",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.BondingCurveParams",
            "name": "bondingCurveParams",
            "type": "tuple"
          },
          {
            "internalType": "uint256",
            "name": "A",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "B",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "wrappedNative",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "routerV2",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothSwapV1Router",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapRouter",
            "type": "address"
          },
          {
            "internalType": "uint24",
            "name": "frothV3FeeTier",
            "type": "uint24"
          },
          {
            "internalType": "address",
            "name": "froth",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "uint256",
                    "name": "mintFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "creatorFeesOnBuyingFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "creatorFeesOnSellingFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "tradeBuyFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "tradeSellFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "graduationFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "rugFee",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct BaseFrothMemeProtocolDeployer.FeeParams",
                "name": "feeParams",
                "type": "tuple"
              },
              {
                "internalType": "address",
                "name": "twapPool",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "teamWallet",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FeeDistributorParams",
            "name": "feeDistributorParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.SaleMemeTokenManagerParams",
            "name": "saleMemeTokenManagerParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "paymentToken",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "paymentAmount",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "memeExpirationTime",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "minContributionAmount",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "maxTotalContribution",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FrothMemeFactoryParams",
            "name": "frothMemeFactoryParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.CreatorFeesClaimerParams",
            "name": "creatorFeesClaimerParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "minNativeAmount",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FrothBurnerParams",
            "name": "frothBurnerParams",
            "type": "tuple"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.InputParams",
        "name": "_inputParams",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "bondingCurveFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "bondingCurve",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "feeDistributor",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "twapPool",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "saleMemeTokenManager",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothMemeFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorFeesClaimer",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothBurner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapAdapter",
            "type": "address"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.OutputParams",
        "name": "_outputParams",
        "type": "tuple"
      }
    ],
    "name": "configure",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "initialAdminAndOperator",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.BondingCurveFactoryParams",
            "name": "bondingCurveFactoryParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "initialVirtualNative",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "initialVirtualTokens",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "maxTokensSold",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "targetGraduation",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.BondingCurveParams",
            "name": "bondingCurveParams",
            "type": "tuple"
          },
          {
            "internalType": "uint256",
            "name": "A",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "B",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "wrappedNative",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "routerV2",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothSwapV1Router",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapRouter",
            "type": "address"
          },
          {
            "internalType": "uint24",
            "name": "frothV3FeeTier",
            "type": "uint24"
          },
          {
            "internalType": "address",
            "name": "froth",
            "type": "address"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "components": [
                  {
                    "internalType": "uint256",
                    "name": "mintFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "creatorFeesOnBuyingFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "creatorFeesOnSellingFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "tradeBuyFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "tradeSellFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "graduationFee",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "rugFee",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct BaseFrothMemeProtocolDeployer.FeeParams",
                "name": "feeParams",
                "type": "tuple"
              },
              {
                "internalType": "address",
                "name": "twapPool",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "teamWallet",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FeeDistributorParams",
            "name": "feeDistributorParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.SaleMemeTokenManagerParams",
            "name": "saleMemeTokenManagerParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "paymentToken",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "paymentAmount",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "memeExpirationTime",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "minContributionAmount",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "maxTotalContribution",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FrothMemeFactoryParams",
            "name": "frothMemeFactoryParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.CreatorFeesClaimerParams",
            "name": "creatorFeesClaimerParams",
            "type": "tuple"
          },
          {
            "components": [
              {
                "internalType": "address",
                "name": "finalAdmin",
                "type": "address"
              },
              {
                "internalType": "address",
                "name": "finalOperator",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "minNativeAmount",
                "type": "uint256"
              }
            ],
            "internalType": "struct BaseFrothMemeProtocolDeployer.FrothBurnerParams",
            "name": "frothBurnerParams",
            "type": "tuple"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.InputParams",
        "name": "_inputParams",
        "type": "tuple"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "bondingCurveFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "bondingCurve",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "feeDistributor",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "twapPool",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "saleMemeTokenManager",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothMemeFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorFeesClaimer",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothBurner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapAdapter",
            "type": "address"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.OutputParams",
        "name": "_outputParams",
        "type": "tuple"
      }
    ],
    "name": "deploy",
    "outputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "bondingCurveFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "bondingCurve",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "feeDistributor",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "twapPool",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "saleMemeTokenManager",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothMemeFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorFeesClaimer",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothBurner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapAdapter",
            "type": "address"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.OutputParams",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "bondingCurveFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "bondingCurve",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "feeDistributor",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "twapPool",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "saleMemeTokenManager",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothMemeFactory",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "creatorFeesClaimer",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "frothBurner",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "uniswapV3SwapAdapter",
            "type": "address"
          }
        ],
        "internalType": "struct BaseFrothMemeProtocolDeployer.OutputParams",
        "name": "outputParams",
        "type": "tuple"
      }
    ],
    "name": "printOutputParams",
    "outputs": [],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_uint256",
        "type": "uint256"
      }
    ],
    "name": "toString",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "_bytes32",
        "type": "bytes32"
      }
    ],
    "name": "toString",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  }
]

Source code

// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;

import {console} from "forge-std-1.9.4/src/console.sol";
import {CreatorFeesClaimer} from "../../src/CreatorFeesClaimer.sol";
import {BaseFrothMemeProtocolDeployer} from "./BaseFrothMemeProtocolDeployer.sol";

/// @dev The UniswapV3SwapAdapter and FrothBurner moved to FrothMemeProtocolDeployer05:
///      three embedded creation codes put this deployer over the EIP-170 size limit.
contract FrothMemeProtocolDeployer04 is BaseFrothMemeProtocolDeployer {
    function deploy(InputParams memory _inputParams, OutputParams memory _outputParams)
        external
        override
        onlyOrchestrator
        returns (OutputParams memory)
    {
        _outputParams = _deployCreatorFeesClaimer(_inputParams, _outputParams);
        return _outputParams;
    }

    function configure(InputParams calldata _inputParams, OutputParams calldata _outputParams)
        external
        override
        onlyOrchestrator
    {
        _configureCreatorFeesClaimer(_inputParams, _outputParams);
    }

    function _deployCreatorFeesClaimer(InputParams memory inputParams, OutputParams memory outputParams)
        internal
        returns (OutputParams memory)
    {
        outputParams.creatorFeesClaimer = address(
            new CreatorFeesClaimer(
                outputParams.saleMemeTokenManager,
                inputParams.wrappedNative,
                inputParams.initialAdminAndOperator,
                inputParams.initialAdminAndOperator
            )
        );
        return outputParams;
    }

    function _configureCreatorFeesClaimer(InputParams memory inputParams, OutputParams memory outputParams) internal {
        CreatorFeesClaimer creatorFeesClaimer = CreatorFeesClaimer(outputParams.creatorFeesClaimer);

        creatorFeesClaimer.grantRole(creatorFeesClaimer.FEE_DISTRIBUTOR_ROLE(), outputParams.feeDistributor);
        if (inputParams.initialAdminAndOperator != inputParams.creatorFeesClaimerParams.finalOperator) {
            creatorFeesClaimer.grantRole(
                creatorFeesClaimer.OPERATOR_ROLE(), inputParams.creatorFeesClaimerParams.finalOperator
            );
            creatorFeesClaimer.revokeRole(creatorFeesClaimer.OPERATOR_ROLE(), inputParams.initialAdminAndOperator);
            // Hand the emergency pause lever (CLAIM_FEES) to the final operator; the constructor
            // grants PAUSER to the ephemeral deployer.
            creatorFeesClaimer.grantRole(
                creatorFeesClaimer.PAUSER_ROLE(), inputParams.creatorFeesClaimerParams.finalOperator
            );
            creatorFeesClaimer.revokeRole(creatorFeesClaimer.PAUSER_ROLE(), inputParams.initialAdminAndOperator);
        }

        if (inputParams.initialAdminAndOperator != inputParams.creatorFeesClaimerParams.finalAdmin) {
            creatorFeesClaimer.grantRole(
                creatorFeesClaimer.DEFAULT_ADMIN_ROLE(), inputParams.creatorFeesClaimerParams.finalAdmin
            );
            creatorFeesClaimer.revokeRole(creatorFeesClaimer.DEFAULT_ADMIN_ROLE(), inputParams.initialAdminAndOperator);
        }
    }

    function printOutputParams(OutputParams memory outputParams) external view {
        _printOutputParams(outputParams);
    }
}
Chain explorer1226msChain node81ms