跳到主要内容

充值

在 everPay 上,不同类型区块链的钱包地址都对应一个 everPay 账户。everPay 账户 ID 与该钱包在对应区块链的钱包地址一致。用户无需在 everPay 注册账户,目前 everPay 已支持所有 Ethereum 和 Arweave 的有效账户。

例如:

  • Ethereum 钱包 0x26361130d5d6E798E9319114643AF8c868412859 在 everPay 上对应的账户 ID 即为 0x26361130d5d6E798E9319114643AF8c868412859。
  • Arweave 钱包 5NPqYBdIsIpJzPeYixuz7BEH_W7BEk_mb8HxBD3OHXo 在 everPay 上对应的账户 ID 即为 5NPqYBdIsIpJzPeYixuz7BEH_W7BEk_mb8HxBD3OHXo。 nn everPay 充值行为,即向 everPay DAO 管理的区块链钱包地址进行区块链转账。

例如:

  • Ethereum 钱包 0x26361130d5d6E798E9319114643AF8c868412859 给 everPay 在 Ethereum 上的多签合约转账 0.1 USDT,everPay 的后端服务监测到该笔入账,并等待20个区块确认,即会在 everPay 上,标记此 0x26361130d5d6E798E9319114643AF8c868412859 everPay 账户 资产增加 0.1 USDT。
  • Arweave 钱包 5NPqYBdIsIpJzPeYixuz7BEH_W7BEk_mb8HxBD3OHXo 给 everPay 在 Arweave 管理的门限签名钱包地址转账 0.1 AR,everPay 的后端服务监测到该笔入账,并等待20个区块确认,即会在 everPay 上,标记此 5NPqYBdIsIpJzPeYixuz7BEH_W7BEk_mb8HxBD3OHXo everPay 账户 资产增加 0.1 AR。

给 Ethereum 账户充值

imToken / MetaMask 等区块链钱包

  1. 通过 info API 获取 everPay 在 Ethereum 的多签合约地址 ethLocker
  2. 通过 imToken / MetaMask 等区块链钱包 工具,给该 ethLocker 多签合约地址转账想要充值的资产与数量。
  3. 等待 该笔交易需 20 个区块确认。
  4. 通过 balances API 获取此钱包对应的 everPay 账户,在 everPay 上的资产信息。

通过 ethers.js

伪代码参考来源:everpay-js src/lib/ethereum.ts#L14

const transferAsync = async (ethConnectedSigner: Signer, {
symbol,
token,
from,
to,
value
}: TransferAsyncParams): Promise<EthereumTransaction> => {
let transactionResponse: EthereumTransaction
if (symbol.toLowerCase() === 'eth') {
const transactionRequest = {
from: from.toLowerCase(),
to: to?.toLowerCase(),
value
}
transactionResponse = await ethConnectedSigner.sendTransaction(transactionRequest)
} else {
const tokenID = getTokenAddrByChainType(token, ChainType.ethereum)
const erc20RW = new Contract(tokenID.toLowerCase(), erc20Abi, ethConnectedSigner)
transactionResponse = await erc20RW.transfer(to, value)
}
return transactionResponse
}

通过 everpay-js

everpay-js 现已封装开源,内部集成了 ethers.js,开发者无需关心 Token decimals,易于集成与使用。

使用 everpay-js 进行充值,可参考:everpay-js deposit

给 Arweave 账户充值

ArConnect 等区块链钱包

  1. 通过 info API 获取 everPay 在 Arweave 上门限签名管理的钱包地址 arLocker
  2. 通过 ArConnect 等区块链钱包 工具,给该 arLocker 地址转账想要充值的资产与数量。
  3. 等待 该笔交易需 20 个区块确认。
  4. 通过 balances API 获取此钱包对应的 everPay 账户,在everPay 上的资产信息。

通过 arweave.js

伪代码参考来源:everpay-js src/lib/arweave.ts#L102

const transferAsync = async (arJWK: ArJWK, {
to,
value
}: TransferAsyncParams): Promise<ArTransferResult> => {
const arweave = Arweave.init(options)

const transactionTransfer = await arweave.createTransaction({
target: to,
quantity: value.toString()
}, arJWK)
// 直接给原来 transaction 赋值了 signature 值
await arweave.transactions.sign(transactionTransfer, arJWK)
const responseTransfer = await arweave.transactions.post(transactionTransfer)
return responseTransfer
}

通过 everpay-js

everpay-js 现已封装开源,内部集成了 arweave.js、arConnect,开发者无需关心 Token decimals,易于集成与使用。

使用 everpay-js 进行充值,可参考:everpay-js deposit

everPay 交易

充值的 everPay 交易,是由 everPay 后端服务在检测到 everPay DAO 钱包地址收到资产后,由 everPay 签名钱包 生成 Schema 并进行签名后,提交至 everPay 服务器,来标记用户账户资产的增加。

此部分充值的 everPay 交易,不需要开发者进行生成和签名,开发者可选择跳过。

Schema

字段描述
tokenSymbol代币名称,AR,ETH,USDT,USDC 等。
action'mint'代表充值。
fromeverPay 签名钱包地址。
to用户进行充值的区块链转账钱包地址,即需要充值的 everPay 账户 ID。
amount充值资产数额,类型为 uint。设置时经过 decimals 处理,例如 0.1USDT,此处经过 USDT 的 decimals: 6 处理后,为 100000。
fee手续费,类型为 uint。设置时经过进行 decimals 处理,例如 0.1USDT,此处经过 USDT 的 decimals: 6 处理后,为 100000。
feeRecipient手续费收款 everPay 账户 ID,通过 info API 接口获取。
nonceunix milliseconds,unix 毫秒时间戳。
tokenID通过 info API 接口获取,与 tokenSymbol 对应的 token id 字段一致
chainTypechainTypeinfo API 接口获取的 tokenSymbol 对应 token chainType 一致
chainIDchainIDinfo API 接口获取的 tokenSymbol 对应 chainID 一致
data用户进行充值的区块链转账交易数据,不同的区块链转账交易数据不同。
version交易版本 'v1'
信息
  • action 充值的 everPay 交易,action 指定为 'mint'
  • to 指定为 充值的 everPay 账户 ID。
  • data everPay 会将原区块链的充值详情,作为 Schema data 参数,用于关联与溯源。

以太坊账户充值示例

{
"tokenSymbol": "ETH",
"action": "mint",
"from": "0xa06b79E655Db7D7C3B3E7B2ccEEb068c3259d0C9",
"to": "0x98905d8B65A24bcE11D2915c9A5C526E62F80000",
"amount": "90000000000000000",
"fee": "0",
"feeRecipient": "0x6451eB7f668de69Fb4C943Db72bCF2A73DeeC6B1",
"nonce": 1627277080832,
"tokenID": "0x0000000000000000000000000000000000000000",
"chainType": "ethereum",
"chainID": "1",
"data": "{\"hash\": \"0x9fcfad3670edf887f3d42a48dfae82ec9c8689d2d8f5749099359b88042984dc\", \"nonce\": \"0xb\", \"blockHash\": \"0x3c40385cd619ec85981e129a3767128bcd21aaba2a0157e165380ef25af3b3e6\", \"blockNumber\": \"0xc4d666\", \"transactionIndex\": \"0x106\", \"from\": \"0x98905d8B65A24bcE11D2915c9A5C526E62F80000\", \"to\": \"0x38741A69785e84399Fcf7c5ad61D572f7EcB1dab\", \"value\": \"0x13fbe85edc90000\", \"gas\": \"0x587a\", \"gasPrice\": \"0x5d21dbfb3\", \"input\": \"0x\", \"r\": \"0x6b67df40d2509efbca5be9b95205d2844714f05f010c0de315efb13c37a712d0\", \"s\": \"0x5cd205e2cd0eea0011292d3fafa9475b138b2ff4947176bc94edc6e997b97179\", \"v\": \"0x25\"}",
"sig": "0xccf208efaf9a2359ecf50f518e345e92b8b260a1692bdacdfe805be6e9a49f1d1ebe821ebbde2cb42744422becb1c430e4f67d822df22d7c26c6de08417c5f9a1c"
}

Arweave 账户充值示例

{
"tokenSymbol": "AR",
"action": "mint",
"from": "0xa06b79E655Db7D7C3B3E7B2ccEEb068c3259d0C9",
"to": "4g-19C67-avcYzufcc4_ame3RNtCi12K9LDrkeXdwBA",
"amount": "500000000000000",
"fee": "0",
"feeRecipient": "0x6451eB7f668de69Fb4C943Db72bCF2A73DeeC6B1",
"nonce": 1627476994839,
"tokenID": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,0x4fadc7a98f2dc96510e42dd1a74141eeae0c1543",
"chainType": "arweave,ethereum",
"chainID": "0,1",
"data": "{\"format\": 2, \"id\": \"D3pYmLFViRQlDQW5_CJvAbFkPRgi_0MVrntkhFqBXv4\", \"last_tx\": \"EelSY8pa3ZXFUrtXVQmjh3xqkunr4zLj1iYNXQXSiwMn6r5lWXIxTTJalb75CT-e\", \"owner\": \"kqyojcylUXJ-zRZWCq0JsfB5Er7jZ8KIJdpu12xIiuD61WyAH0PZjGX-CeDjCDpdn2rz-5fywiSIhDelMSlLwRZlpMOX-wAR8sXVRlcjo9ybykNPJGSfuKjBvnkP7OyejvEm43pyGSpJWUMYZYDKDrZVTEnwz5bgiPRTPM8EIg8IJauibUrOVTJ9Fo3ffDVLo32P1H0gFMhI5eWn5z_UtXzmFLsxT8XUtWLdpF0aoe4LSoiBgw1BUnHKyX26L854HvULMGL9Onoy6qXMbzlJvUsmoqe8tjvgGlju4XvU0W8ec7ERXfUg9HnKPwC4Cz9U1kZT1JQMnU4S_RREoR9-UGWKWannAOjPB2rw4WMQklR8B-y5Z_hN4LbC5pAZeR-YBCqVc1aQhKYnXWYaVY_-TbHeqAk_befbgbrPrpc9pVlulUIIYdhj0G6QDThsJMUs0XcTjq3YH3_5w3Xzta6UW-wKrA00MfWASnjjMbN3zYfCFG9FQiW6DUaIQrSq-5Vdnb9n3QAMT4Uz5r0ifjbHF33fPxqkcEUD_HcdfuPnHqKcmhd_t-mc55g5Z9BKKGiOXv-H6Jq0vLahuYaZQwN4cxSyRHZNpzcFMwz-rQXeEqlFpoVvbj3xnysMAeuMgJFbS2GBMf2SftN6PDgnhpdh5EbdnL2jBlmBo6RumCcVgt8\", \"tags\": [{\"name\": \"U2lnbmluZy1DbGllbnQ\", \"value\": \"QXJDb25uZWN0\"}, {\"name\": \"U2lnbmluZy1DbGllbnQtVmVyc2lvbg\", \"value\": \"MC4zLjE\"}], \"target\": \"dH-_dwLlN86fitrFZzi86IVEEQFyYpTzWcqnFh460ys\", \"quantity\": \"500000000000000\", \"data\": \"\", \"data_size\": \"0\", \"data_tree\": [], \"data_root\": \"\", \"reward\": \"1602432\", \"signature\": \"OyTAe5I_uAquM4rr09Zt1YDCORyfzpVkL59lue84KcM44qIuR9nIotNM0VVJkXLLcu3nRz16zOTFKLVwpqxzppSARclXP6_VSas9UHjrfx5WiQrJO1aTq821vlwbw6uAnZcOGfcci0dLCtXscNNKJ1mmjnqaccxmwUlEdbvJm29R0fiN5_y8UDKWlSVMrqm391-Gac7MEBdXTO5Em5foIrESnOb0-mF2Gdk5XsQ62y-6k9lqKnK56ro2gMaSCHlGUNtnxdEsOHpmjJTzt9lL7i8CH2gxZYIWAkJbsrtto_0td2nMeeS-JwdxwMsE__19iKQ_8PGPWJ_gevLjHI7uvtaYxGGMxCB-Gq9yiuNl9J5g4SNd82MeWE6OR4k44tyH6uGYBBKn5VSZKs2q5KR20vYV9d2PaRODKPhleZ5VpzjRMWDlypD-s7yCysUPOqMRW87oZjMB69Xm1ouN-f-q6TlT6GeO6J9QfsuHo2g6KwiISsSaYkYbMbxmMF05Y1fodKMPBjSdNFtPJLpDtXJO-HmYcY7yzyhKEjOewqpOdGFWcCDMecv4wy16nkk1HRuKcz72-BzSHo_CNYmwYewDXkktSkD3vl4EKvB7AYlBFX9C5zNMq-px1kKgZN_B5-AQ1rYiHUSNRj7lhFwabQferAJ7AfnVRlo2K-olriWSSQQ\", \"targetChainType\": \"arweave\"}",
"sig": "0x2893bb0b2c5d743e656e66b2f76050166c062c369286d303a217b6ea00ea88fa1345683edd371d698b8cfaf8df7f60b19a16940e7349284b23521c1050cfb2ab1c"
}

记录查询

开发者可通过 mintedTxByChainTxHash 接口,根据充值的区块链记录ID (如以太坊为 txHash),查询充值的 everPay 交易记录,来确认充值是否已经完成。