钱包 API
快速开始

快速开始#

本章节,将介绍如何快速使用钱包 API。仅需三步,你就可以熟悉欧易 WaaS 服务的必备步骤,并使用 Javascript 快速搭建一个创建钱包的程序实例。

第一步:准备工作#

创建项目和生成 API key,在开始使用钱包 API 之前,你需要先在开发者管理平台创建项目并生成 API key。以下是详细的步骤和相关资源:

  1. 登录开发者管理平台。
  2. 创建新的项目。
  3. 在项目设置中生成 API key。

我们已经为你准备了详细的指南,帮助你完成这些步骤。你可以阅读开发者管理平台指南,以便更快地开始使用。

其次,你还需要做一些基础的调用配置工作。

REST 请求验证配置#

在发送 REST 请求时,你需要进行验证。我们提供了一个详细的 REST 请求验证指南,帮助你理解和实施这个过程。

Node.js 环境设置#

导入必要的 Node.js 库并设置你的环境变量以及定义辅助函数和组装参数 Node.js 环境设置

第二步:生成钱包私钥及地址#

下面介绍如何使用 WaaS Wallet SDK 创建钱包助记词及地址,若你已经自行生成钱包私钥及地址,可以忽略这一步直接跳到下一步。

快速开始以 Javascript SDK js-wallet-sdk 为案例,其他语言的 SDK 可以参考 OKX WaaS Wallet SDK 详情

npm install#

要使用 SDK,首先需要安装它,你可以使用 npm 安装来获取到最新版本。

我们的 SDK 支持两种类型的包:公共包和单币种模块

公共包,针对所有币种

npm install @okxweb3/crypto-lib
npm install @okxweb3/coin-base

单币种包,往往只包含单链币种,以 ETH 为例:

npm install @okxweb3/coin-ethereum

想了解其他链 Javascript SDK 的构建方式,请查看 SDK 参考获取详细信息。本章继续以 ETH 进行后续操作。

本地构建#

  1. 下载项目源码
git clone https://github.com/okx/js-wallet-sdk.git
  1. 运行构建脚本
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 提供了多地址的结构化的订阅查询,你可以将多个地址关联于一个钱包账户,高效地进行多链场景下的资产状态和交易历史查询。 我们提供了两种钱包账户类型:用户钱包账户、观察钱包账户。

  • 用户钱包账户:需要提供消息签名用于鉴权,可以自由添加自定义代币,可以发送交易。
  • 观察钱包账户:无需提供消息签名,默认展示所有OKX平台所收录的代币,不能发送交易。

接下来的步骤,我们以用户钱包账户为例。

生成 UNIX 时间戳的消息签名#

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 实现资产查询、交易发送等功能。

欢迎前往查看 API 参考 以及 SDK 参考