本章节,将介绍如何快速使用钱包 API。仅需三步,你就可以熟悉欧易 WaaS 服务的必备步骤,并使用 Javascript 快速搭建一个创建钱包的程序实例。
创建项目和生成 API key,在开始使用钱包 API 之前,你需要先在开发者管理平台创建项目并生成 API key。以下是详细的步骤和相关资源:
我们已经为你准备了详细的指南,帮助你完成这些步骤。你可以阅读开发者管理平台指南,以便更快地开始使用。
其次,你还需要做一些基础的调用配置工作。
在发送 REST 请求时,你需要进行验证。我们提供了一个详细的 REST 请求验证指南,帮助你理解和实施这个过程。
导入必要的 Node.js 库并设置你的环境变量以及定义辅助函数和组装参数 Node.js 环境设置。
下面介绍如何使用 WaaS Wallet SDK 创建钱包助记词及地址,若你已经自行生成钱包私钥及地址,可以忽略这一步直接跳到下一步。
快速开始以 Javascript SDK js-wallet-sdk 为案例,其他语言的 SDK 可以参考 OKX WaaS Wallet SDK 详情。
要使用 SDK,首先需要安装它,你可以使用 npm 安装来获取到最新版本。
我们的 SDK 支持两种类型的包:公共包和单币种模块。
公共包,针对所有币种:
npm install @okxweb3/crypto-lib
npm install @okxweb3/coin-base
单币种包,往往只包含单链币种,以 ETH 为例:
npm install @okxweb3/coin-ethereum
想了解其他链 Javascript SDK 的构建方式,请查看 SDK 参考获取详细信息。本章继续以 ETH 进行后续操作。
git clone https://github.com/okx/js-wallet-sdk.git
sh build.sh
以 EVM 网络为例,可以依照下述代码,使用 SDK 创建一个 EVM 钱包对象,并且推导出所对应地址。
import { bip39, BigNumber } from "@okxweb3/crypto-lib";
import { EthWallet } from "@okxweb3/coin-ethereum";
// eth wallet
let wallet = new EthWallet();
// get mnemonic
let mnemonic = await bip39.generateMnemonic();
console.log("generate mnemonic:", mnemonic);
// get derived key
const hdPath = await wallet.getDerivedPath({ index: 0 });
let derivePrivateKey = await wallet.getDerivedPrivateKey({ mnemonic: mnemonic, hdPath: hdPath });
console.log("generate derived private key:", derivePrivateKey, ",derived path: ", hdPath);
// get new address
let newAddress = await wallet.getNewAddress({ privateKey: derivePrivateKey });
console.log("generate new address:", newAddress.address);
// get the public key
let publicKey = newAddress.publicKey;
console.log("the corresponding public key:", publicKey);
我们准备了一个开源演示程序,用于展示我们上述涉及到 SDK 的功能。 获取演示程序源码点击这里。
区别于一般的单地址查询模式,OKX WaaS 提供了多地址的结构化的订阅查询,你可以将多个地址关联于一个钱包账户,高效地进行多链场景下的资产状态和交易历史查询。 我们提供了两种钱包账户类型:用户钱包账户、观察钱包账户。
接下来的步骤,我们以用户钱包账户为例。
let now = new Date();
let timestamp = now.getTime();
let timestampString = timestamp.toString();
console.log(timestampString);
let signParams = {
privateKey: derivePrivateKey,
data: timestampString
}
let signature = await wallet.signMessage(signParams);
console.log(signature);
通过上述获取的 address、publicKey、signature、signMessage,以及 chainIndex 信息,调用 POST /api/v5/waas/account/create-account
接口来创建用户钱包。
//定义你的参数
const addresses = [
{
"chainIndex":"1",
"address":"0x561815e02bac6128bbbbc551005ddfd92a5c24db",
"publicKey":"02012db63bf0380294a6ecf87615fe869384b0510cb910a094254b6844af023ee2",
"signature":"62acda5e471d9bf0099add50f4845256868d980821c161095651a918d3ef8a6b2286f512028172eabbe46ec2c9c2c20e5c40ff1fb23e1cdfdbed033ad924ce521b"
},
{
"chainIndex":"10",
"address":"0x561815e02bac6128bbbbc551005ddfd92a5c24db",
"publicKey":"02012db63bf0380294a6ecf87615fe869384b0510cb910a094254b6844af023ee2",
"signature":"62acda5e471d9bf0099add50f4845256868d980821c161095651a918d3ef8a6b2286f512028172eabbe46ec2c9c2c20e5c40ff1fb23e1cdfdbed033ad924ce521b"
}
];
const getCreateAccountBody = {
addresses: addresses,
signMessage: '1717062864123', // UNIX Timestamp in millisecond
};
//定义辅助函数
const getCreateAccountData = async () => {
const apiRequestUrl = getRequestUrl(
apiBaseUrl,
'/api/v5/waas/account/create-account'
);
return fetch(apiRequestUrl, {
method: 'post',
headers: headersParams,
body: JSON.stringify(getCreateAccountBody),
})
.then((res) => res.json())
.then((res) => {
return res;
});
};
const { data: createAccountData } = await getCreateAccountData();
若想创建观察钱包,则是调用 POST /api/v5/waas/account/create-watch-only-account
接口。
//定义你的参数
const addresses = [
{
"chainIndex":"1",
"address":"0x561815e02bac6128bbbbc551005ddfd92a5c24db",
},
{
"chainIndex":"10",
"address":"0x561815e02bac6128bbbbc551005ddfd92a5c24db",
}
];
const getCreateWatchOnlyAccountBody = {
addresses: addresses,
};
//定义辅助函数
const getCreateWatchOnlyAccountData = async () => {
const apiRequestUrl = getRequestUrl(
apiBaseUrl,
'/api/v5/waas/account/create-watch-only-account'
);
return fetch(apiRequestUrl, {
method: 'post',
headers: headersParams,
body: JSON.stringify(getCreateWatchOnlyAccountBody),
})
.then((res) => res.json())
.then((res) => {
return res;
});
};
const { data: createWatchOnlyAccountData } = await getCreateWatchOnlyAccountData();
当调用成功时,你将收到如下的响应:
{
"code": 0,
"data": [{
"accountId": "13886e05-1265-4b79-8ac3-b7ab46217655"
}],
"msg": "success"
}
接下来,你可以通过调用 API ,围绕 accountId
实现资产查询、交易发送等功能。