EVM SDK
const RPC_URL = 'https://rpc.testnet.citrea.xyz';
const PRIVATE_KEY = 'your_signer_private_key';
const SAFE_ADDRESS = '0x03123...12'; // your deployed safe address
const txServiceUrls = {
4200n: "https://merlin-mainnet-api.asigna.io/txs/api", // Merlin Mainnet
686868n: "https://merlin-testnet-api.asigna.io/txs/api", // Merlin Testnet
5115n: "https://citrea-testnet-api.asigna.io/txs/api", // Citrea Testnet
3636n: "https://botanix-testnet-api.asigna.io/txs/api" // Botanix Testnet
};
export const contractNetworks = {
4200n: {
safeSingletonAddress: '0x7479c8be2cb59813c1696d4ab8Ab574605DB36bE',
safeProxyFactoryAddress: '0x33539b6B3B521fDd25eE5112552f56A24b87F33f',
multiSendAddress: '0x8AA155Bd561Ff636a729362767E73b855eBF575c',
multiSendCallOnlyAddress: '0xAd2FC07fEfccbACD6433F27Fd3fA70E318e4f687',
fallbackHandlerAddress: '0xB96810C379e1ab89C97265EA450DE4FaD320FAB3',
signMessageLibAddress: '0x21e9f28f769A219754B0Dd83Ef29c0155A2a56Ec',
createCallAddress: '0x147E227890EA8A164BaaFE17a65767846AA43489',
simulateTxAccessorAddress: '0x27A5f29189AbAcf8f5b61785bE49874879e4e9B9',
},
686868n: {
safeSingletonAddress: '0x3D5177A6C60aF40B60d8c00683B160170A419858',
safeProxyFactoryAddress: '0x427E933613Bd65E5f8B106DfE3541b68Ed86B131',
multiSendAddress: '0x07F93f2c661CbD749D451E358685579e3564FEB6',
multiSendCallOnlyAddress: '0x3b2fce2Cb8C9A9538F0D20eE333ebf552BDE3EFA',
fallbackHandlerAddress: '0x47E7A87Afa01a797D2a09E37Cc16683F6e4B7519',
signMessageLibAddress: '0x70D9E8CDcb9BB9058E68F3f7fc1Bdb7B3c2072cd',
createCallAddress: '0x812995c19b5EA51751228A2A0c23d38eEd3ec7D1',
simulateTxAccessorAddress: '0xbB7D99C78FE800466a144cFbdA4d83c742A5035b',
},
5115n: {
safeSingletonAddress: '0x04ad731E80beE8F2BCd71048B5EA85643D9a0787',
safeProxyFactoryAddress: '0x5A0b04FF49D430bB2989dd0966Cd490A2A1e2eA9',
multiSendAddress: '0x2D156b196c7db6f7519E61E7EdBBdcE0396a33BA',
multiSendCallOnlyAddress: '0xddaB6979bf0b48B2eAdfE9895059F44987745c76',
fallbackHandlerAddress: '0xDAcbEcd96406466187c68E87cF5Ca5f588A299D4',
signMessageLibAddress: '0x4BE868b8074DB64d895c688398521d3b0cDCEbCe',
createCallAddress: '0x0B3dFB0Ed456B6e83a70E1a2D2Ef7DaE6AD45E63',
simulateTxAccessorAddress: '0x2d4Dc195BCbE3E1EaFD12E9Ba28C3dDDaa3Fa56E',
},
3636n: {
safeSingletonAddress: '0x2BA5157e7ab9913604d20e4Bd62EbC4fDab26032',
safeProxyFactoryAddress: '0x760eAe3fD965C92ad6977De99Df58aF2814AD4B1',
multiSendAddress: '0x3b644926E435E65751663a83928B983b7D78D012',
multiSendCallOnlyAddress: '0xAa096390abc62E5A603c6F22071dd62895A596d8',
fallbackHandlerAddress: '0xBd58c03BcB2cA285fCC578D326a7C9788A91B61a',
signMessageLibAddress: '0x1205b09e057640d9785805CDaE64d011F30713c6',
createCallAddress: '0x4F058Ac76040a4a2EbBc8fc960C5824ABFad9E0b',
simulateTxAccessorAddress: '0x7872B223719895C0D9505E93D57144bD6ec9611E',
}
};
const chainId = 5115n; // Citrea Testnet selected
const txServiceUrl = txServiceUrls[chainId];
const apiKit = new SafeApiKit({
chainId: 1116n,
txServiceUrl
});
const safeSigner = await Safe.init({
provider: RPC_URL,
signer: PRIVATE_KEY,
safeAddress: SAFE_ADDRESS,
contractNetworks
});
Last updated