跳到主要内容

从 1.18.x 升级到 1.19.x

ArcBlock 的区块链在 v1.19.x 增加了原生的 Passkey 支持,意味着 Passkey 可以在区块链上有对应的账户,可以像其他账户一样签名和发送交易。

而因为增加原生 Passkey 支持,导致部分基础库的 API 发生了破坏性变化,如果你需要使用最新版,请参照下面的升级指南。

升级依赖

你可以使用你熟悉的任何工具,将你项目中的下列依赖升级到最新版:

  • @ocap/*
  • @arcblock/*
  • @blocklet/*

修改代码

@ocap/wallet

wallet.verify 已经变为 async 的方法

javascript
const { fromSecretKey } = require('@ocap/wallet');

const wallet = fromSecretKey(sk, type);
const message = 'data to sign';
const signature = wallet.sign(message);
expect(await wallet.verify(message, signature)).toEqual(true); // changed

支持了新的 DID 类型:

javascript
const { fromPublicKey } = require('@ocap/wallet');
const { fromBase64 } = require('@ocap/util');

const publicKey = fromBase64('pQECAyYgASFYIA3GyM4rSxM_HyV52QTRwGJOdkXurky3cwTLvb_gKSF-Ilggpd0fhMlPdxHBl45_eJxqywCRl-a4IDpeFa4pcfmrxuM');
const wallet = fromPublicKey(publicKey, 'passkey');
expect(wallet.address).toEqual('z3i165rPumFgyQZpZ1W3VLEYBPuV2xSCAjoqo');

@arcblock/vc

下列方法都变为 async

  • create
  • verify
  • verifyPresentation
javascript
const { create, verify, verifyPresentation, createCredentialList, verifyCredentialList } = require('@oarcblock/vc');

const issuer = fromRandom();
const owner = fromRandom();
let vc = null;

const subject = {
  id: owner.address,
  key: 'value',
  method: 'SHA3',
};

const issuerInfo = {
  wallet: issuer,
  name: 'DID.KYC.Email',
};

const vc = await create({
  type: 'EmailVerificationCredential',
  issuer: issuerInfo,
  subject,
  tag: 'abcd',
  endpoint: 'https://www.arcblock.io/api/vc/status',
});

expect(await verify({ vc, ownerDid: owner.address, trustedIssuers: issuer.address })).toEqual(true);

@arcblock/jwt

jwt.verify 已经变为 async 的方法

javascript
const { sign, verify } = require('@arcblock/jwt');

const token = sign(appId, sk, { key: 'value' });
const [, bodyB64] = token.split('.');
const body = JSON.parse(fromBase64(bodyB64).toString());
const result = await verify(token, pk); // changed

@ocap/asset

preMintFromFactory 变为 async 的方法

@blocklet/sdk

wallet.verify is now an async method

javascript
const getWallet = require('@blocklet/sdk/lib/wallet');

const wallet = getWallet();
const message = 'data to sign';
const signature = wallet.sign(message);
expect(await wallet.verify(message, signature)).toEqual(true); // changed