테스트넷 접속 정보
Hardhat, Foundry, wagmi, ethers, viem를 마루 테스트넷에 연결하는 방법을 안내합니다. 엔드포인트, 체인 ID, 지갑 설정, 환경변수 템플릿을 모두 제공합니다.
툴링을 마루 테스트넷에 연결하기 위해 필요한 정보를 모두 모았습니다. EVM 호환 체인이라 Hardhat / Foundry / wagmi / ethers / viem이 마루 특화 패치 없이 연결됩니다. 다만 이더리움에서 익숙한 두 습관은 버려야 합니다. 전송 가스 한도를 21,000으로 고정하는 습관과, 한도의 최소 절반이 과금되므로 추정치보다 가스 한도를 지나치게 높게 잡는 습관입니다(가스와 수수료 참고). 아래 설정으로 네트워크를 추가하고 파우셋에서 테스트 지갑 자금을 받으면 연결이 완료됩니다.
네트워크 설정
| 필드 | 값 |
|---|---|
| Network name | Maroo Testnet |
| Chain ID (EVM) | 450815 |
| Cosmos chain-id | maroo-testnet-1 |
| Tooling slug | maroo-testnet |
| Native currency | tOKRW (Testnet OKRW), 18 decimals, base unit atokrw, display unit tokrw |
| RPC | https://rpc-testnet.maroo.io |
| WebSocket | wss://ws-testnet.maroo.io |
| Block Explorer | https://explorer-testnet.maroo.io |
| Faucet | https://faucet.maroo.io |
| KYC | https://kyc-testnet.maroo.io |
| Indexer (Blockscout API) | https://explorer-testnet.maroo.io/blockscout/api/v2 |
| Cosmos REST | https://api-testnet.maroo.io |
Cosmos chain-id는 privacy 인출의
chainId와 privacy 인증의 cosmosChainIdHash에 들어가는 값입니다. EIP-712 도메인 자체에는 EVM 체인 ID(450815)가 들어갑니다. tooling slug는 MAROO_NETWORK 같은 도구 설정에 쓰는 이름이며 chain-id가 아닙니다. 두 값 모두 가능하면 런타임에 읽습니다. https://api-testnet.maroo.io/cosmos/base/tendermint/v1beta1/node_info의 default_node_info.network가 chain-id이고, /cosmos/evm/vm/v1/params의 evm_denom이 네이티브 denom입니다. KYC 서비스는 카카오를 통한 실제 본인 확인이라 한국 휴대전화 번호가 필요하며, 한 사람당 지갑 하나만 연결됩니다.Mainnet은 아직 출시되지 않았습니다. 메인넷 체인 ID는
815로 정해져 있으며, 엔드포인트는 출시할 때 공개됩니다.가스와 수수료
- 단순 전송에는 21,000이 아니라 약 104,000 가스가 듭니다. 모든 트랜잭션 뒤에 실행되는 컴플라이언스(PCL)·에이전트 검사가 그 트랜잭션의 가스로 계산되기 때문입니다. 가스 한도를 21,000으로 고정해 보낸 트랜잭션은 블록에 포함되지만 실패하고, 수수료는 그대로 부과됩니다. 가스 한도는 도구의
eth_estimateGas추정에 맡깁니다(ethers, viem, Hardhat, MetaMask는 기본으로 추정합니다). ERC-8004 에이전트 지갑에서 보내는 전송은 전역 정책이 그 지갑을 쓰는 각 에이전트의 소유자를 조회하므로 더 많이 듭니다. 지갑을 쓰는 에이전트가 하나면 약 283,000 가스, 둘이면 약 461,000~471,000 가스입니다. 에이전트의 EOA 지갑으로 보내는 전송은 일반 전송과 같은 가스가 들지만, MAWS가 에이전트용으로 만드는 AA 지갑 같은 컨트랙트 지갑으로 보내면 그 지갑의 코드가 실행되므로 더 많이 듭니다. 어떤 경우든 고정값 대신 추정치를 사용합니다. - 가스 한도의 최소 절반은 항상 과금됩니다. 실제 사용량이 더 적어도 마찬가지입니다(
min_gas_multiplier0.5). 따라서 한도를 추정치보다 지나치게 높게 잡지 않습니다. - OKRW에는 ERC-20 진입점이 없습니다. tOKRW는 네이티브 코인으로, 트랜잭션의
value/msg.value로 이동합니다.0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE에는 ERC-20 호출에 응답하는 코드가 없습니다. 이 주소로 보낸 ERC-20 트랜잭션은 블록에 포함되지만 아무것도 옮기지 않고,balanceOf같은 클라이언트 조회는 빈 데이터를 받으며(viem은 예외를 발생시킵니다), 컨트랙트의IERC20(…)호출은 빈 데이터로 revert됩니다. 자세한 내용은deployed-contracts를 참고합니다.
도메인 네이밍 규칙
테스트넷 서비스는
<service>-testnet.maroo.io 패턴을 따르며, 파우셋은 faucet.maroo.io입니다. 일부 사이트는 환경과 관계없이 단일 URL을 씁니다: maroo.io(랜딩), litepaper.maroo.io, docs.maroo.io. 메인넷은 아직 출시되지 않았으며, 엔드포인트는 출시할 때 공개됩니다.| 서비스 | Testnet |
|---|---|
| RPC | rpc-testnet.maroo.io |
| WebSocket | ws-testnet.maroo.io |
| Explorer | explorer-testnet.maroo.io |
| Faucet | faucet.maroo.io |
| KYC | kyc-testnet.maroo.io |
| Cosmos REST | api-testnet.maroo.io |
viem 체인 설정
viem 셋업에 그대로 사용합니다:
import { defineChain } from 'viem';
export const marooTestnet = defineChain({
id: 450815,
name: 'Maroo Testnet',
network: 'maroo-testnet',
nativeCurrency: {
name: 'Testnet OKRW',
symbol: 'tOKRW',
decimals: 18,
},
rpcUrls: {
default: {
http: ['https://rpc-testnet.maroo.io'],
webSocket: ['wss://ws-testnet.maroo.io'],
},
},
blockExplorers: {
default: {
name: 'Maroo Explorer',
url: 'https://explorer-testnet.maroo.io',
},
},
testnet: true,
}); viem 체인 설정
wagmi에서 사용 시
createConfig의 chains 배열에 marooTestnet을 전달합니다.MetaMask에 추가
MetaMask → Settings → Networks → Add network → Add a network manually. 다음 입력:
저장 후 Maroo Testnet으로 전환하고 파우셋(
- Network name:
Maroo Testnet - New RPC URL:
https://rpc-testnet.maroo.io - Chain ID:
450815 - Currency symbol:
tOKRW - Block explorer URL:
https://explorer-testnet.maroo.io
저장 후 Maroo Testnet으로 전환하고 파우셋(
https://faucet.maroo.io)에서 테스트 tOKRW를 수령합니다.Quick-start 스니펫
ethers.js v6:
import { JsonRpcProvider } from 'ethers';
const provider = new JsonRpcProvider('https://rpc-testnet.maroo.io');
const block = await provider.getBlockNumber();
console.log('current block:', block); Quick-start 스니펫
web3.js:
import Web3 from 'web3';
const web3 = new Web3('https://rpc-testnet.maroo.io');
const block = await web3.eth.getBlockNumber();
console.log('current block:', block); Quick-start 스니펫
Hardhat (
hardhat.config.ts):import type { HardhatUserConfig } from 'hardhat/config';
// Hardhat 3: the project must be ESM ("type": "module" in package.json),
// and @nomicfoundation/hardhat-toolbox must NOT be installed.
const config: HardhatUserConfig = {
solidity: '0.8.28', // matches the compiler Maroo builds with
networks: {
marooTestnet: {
type: 'http', // required by Hardhat 3
url: 'https://rpc-testnet.maroo.io',
chainId: 450815,
accounts: [process.env.PRIVATE_KEY!],
},
},
};
export default config; Quick-start 스니펫
Foundry (
foundry.toml):[rpc_endpoints]
maroo_testnet = "https://rpc-testnet.maroo.io"
[etherscan]
maroo_testnet = { key = "unused", url = "https://explorer-testnet.maroo.io/blockscout/api" } 환경변수 템플릿
.env에 그대로 사용합니다:# Maroo Testnet
MAROO_RPC_URL=https://rpc-testnet.maroo.io
MAROO_WS_URL=wss://ws-testnet.maroo.io
MAROO_CHAIN_ID=450815
MAROO_COSMOS_CHAIN_ID=maroo-testnet-1
MAROO_NETWORK=maroo-testnet
MAROO_EXPLORER_URL=https://explorer-testnet.maroo.io
MAROO_FAUCET_URL=https://faucet.maroo.io
MAROO_INDEXER_URL=https://explorer-testnet.maroo.io/blockscout/api/v2
MAROO_KYC_URL=https://kyc-testnet.maroo.io
MAROO_REST_URL=https://api-testnet.maroo.io 테스트넷에서 할 수 있는 것
- 파우셋에서 테스트 tOKRW를 수령합니다.
- 계정 간 기본 전송을 수행합니다. tOKRW는 네이티브 코인이라 트랜잭션의 value로 보내며, 일반 계정 간에는 건당 약 104,000 가스가 들고, 에이전트 지갑에서 보내거나 컨트랙트 지갑으로 보내면 더 많이 듭니다(가스 한도는 도구의 추정에 맡깁니다).
- Hardhat / Foundry로 Solidity 컨트랙트를 배포합니다.
https://kyc-testnet.maroo.io에서 KYC attestation 흐름을 실행합니다. 카카오를 통한 실제 본인 확인이라 한국 휴대전화 번호가 필요합니다.- PCL의 두 경로를 실습합니다. 일반 전송에 쓰는 Open Path와, PCL 래핑 프록시를 거치는 호출을 PCL이 실행 전후(
preCall,postCall)에 평가하는 Regulated Path입니다. Open Path에도 전역 정책은 그대로 적용되어, EAS attestation이 없는 발신자는 트랜잭션당 200만 OKRW, UTC 기준 하루 1,000만 OKRW까지만 보낼 수 있습니다. 에이전트 지갑의 전송은 소유자의 하루 누적 거래량에 더해지므로, 두 한도를 모두 풀려면 소유자의 attestation이 필요합니다. - ERC-8004 IdentityRegistry preinstall(
0x8004000000000000000000000000000000000001)에서 에이전트 신원을 조회합니다. Agent 프리컴파일은 레지스트리 주소를 돌려주고, 에이전트 지갑을 에이전트 ID에 매핑합니다.