Skip to content
PRESS.one Node.js SDK
Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
apis
samples
.gitignore
LICENSE
README.md
fixtures.js
package-lock.json
package.json

README.md

PRS SDK 简介

PRS SDK 是 prs-utilityprs-lib 的示例代码合集。

  • prs-utility 是 PRS 提供的算法工具库,包含项目中需要使用的所有哈希、加密算法。
  • prs-lib 是对 PRS REST API 的封装,开发者可以直接调用与 PRS 服务通信。

使用方法及代码示例

在 samples 目录有所有的代码示例,使用方法:

  1. 打开需要执行的某个示例文件,如 app.example.js,将其中的参数改成你自己的 DApp 参数。
  2. 执行示例文件即可,如。
npm i && cd samples
node app.example.js

如何开发 DApp

开发流程

  1. 开发者前往 PRS 官网注册账号。(正式环境:https://press.one,测试环境:https://beta.press.one�)
  2. 登录成功后进入开发者设置我的 DApp,完善开发者信息以及创建 DApp。
  3. 在项目中安装 prs-utilityprs-lib
  4. DApp 在适当的时候,引导用户跳转到 PRS 提供的 Web 页面进行授权。
  5. 授权成功后能够获取到 access token,拿到 token 之后即可进行签名发布文件、创建合约等操作。

创建 DApp

进入我的 DApp,填写必要信息(名称、描述、主页 URL、授权回调 URL)即可创建 DApp,创建成功后,能够获取到对应的 privateKey、publicKey、address,用于之后的用户授权。

  • address: DApp 在 PRS 系统中的唯一标识。
  • privateKey: 创建 DApp 时生成的私钥,用户通过 Web 授权时,开发者需要通过 privateKey 换取 token。

安装

通过 npm 安装:

npm install prs-utility --save
npm install prs-lib --save

示例代码

  // 1. 开发者前往 PRS 网站,创建 DApp,获取到对应的 address 和 privateKey。
  const appAddress = '7483f699284b55eb585b229c0ccee1f46fb893a8';
  const appPrivateKey = '7552f60cdce1859e45e9ba3ec4b677c883a1016187c82415b2ffc45708e69670';

  // 2. 开发者获取到授权页面,引导用户跳转到该页面进行授权。
  const client1 = new PRS({ env: 'env', debug: true });
  const webAuthorizeUrl = client1.dapp.getAuthorizeUrl(appAddress);
  console.log('webAuthorizeUrl: ' + webAuthorizeUrl);

  // 3. 用户跳转至 webAuthorizeUrl 后,会显示[确认授权]按钮,如果用户点击[确定授权],页面会回调至 `REDIRECT_URL/?code=CODE`,此时就能通过 query string 拿到返回的 code。
  const code = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTMxNzc5NTcsImp0aSI6Ijg4MjQ3NDMzLWMxOTctNDFmMS04NTFlLTNmZDAwZWQzMWZkYSIsImRhdGEiOnsidXNlckFkZHJlc3MiOiJhZDMzNDc4NjdlNzBmNjRiYWY1ZDBjMzg4ZjIzYjQxOGNhMTA1Y2E1IiwiYXBwQWRkcmVzcyI6Ijc0ODNmNjk5Mjg0YjU1ZWI1ODViMjI5YzBjY2VlMWY0NmZiODkzYTgiLCJ0eXBlIjoiZW1haWwiLCJhdXRoQWRkcmVzcyI6IjU4NmE3OTdlZjhmZjQzNjJlMTY3MWZlYTM2ZGZhM2Y0MzFkMDcyMmMifSwicHJvdmlkZXIiOiJwcmVzc29uZSIsImV4cCI6MTU1MzQzNzE1N30.GyaPCApA8oR6PIV2ZoHG7gTwKf7x5JpqaqdzYHZtsMU';

  // 4. 拿到code之后,开发者使用 appPrivateKey 调用接口换取 access token。
  const res1 = await client1.dapp.authByCode(code, appAddress, appPrivateKey);
  const token = res1.body.token;
  const authAddress = res1.body.appAuthentication.authAddress;
  console.log('token: ' + token);
  console.log('authAddress: ' + authAddress);

  // 5. 获取到 access token 之后即可签名文件。
  // 需要签名的文件,签名文件的内容不可重复。
  const markdownFile = `../${String(Date.now())}.md`;
  const markdownFileUrl = path.join(__dirname, markdownFile);
  fs.writeFileSync(markdownFileUrl, String(Date.now()), 'utf-8');

  const client2 = new PRS({ env: 'env', debug: true, address: authAddress, token: token });
  const stream = fs.createReadStream(markdownFileUrl);
  const data = { stream: stream, filename: 'text.md', title: 'xxx' };
  const meta = { uuid: 'xxxx' };
  const res2 = await client2.file.signByStream(data, meta);
  const fileHash = res2.body.cache.msghash;
  const fileRId = res2.body.cache.rId;
  console.log('fileHash: ' + fileHash);
  console.log('fileRId: ' + fileRId);

  fs.unlinkSync(markdownFileUrl)

  // 6. 签名成功之后,我们可以为文件绑定合约。
  // a. 创建合约。 创建合约需要遵循指定格式,目前收款人必须为创建者本人。具体可参考 DApp 开发者文档。
  const contractCode = `PRSC Ver 0.1
  Name 购买授权
  Desc 这是一个\\n测试合约
  Receiver ${authAddress}
  License usage1 CNB:0.001 Terms: 这是个人使用条款,禁止\\n商业应用。
  License usage2 CNB:0.002 Terms: 这是商业使用条款,允许\\n修改和复制。`;
  const contractRes = await client2.contract.create(contractCode);
  const contractRId = contractRes.body.contract.rId;
  console.log('contractRId: ' + contractRId);

  // b. 绑定合约。
  const bindRes = await client2.contract.bind(contractRId, fileRId, authAddress);
  console.log(bindRes.body);

  // 7. 合约绑定之后,其他用户就可以购买合约。
  const buyerAddress = '27d64b3524ef5679c4d7c3493088c70478a700db';
  const buyerToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTMyMTcwMzgsImp0aSI6IjQzMzY2ZTFkLTQ4ODQtNDEyZS1hNDkwLWEwYzFiYWZmZmQxYyIsImRhdGEiOnsiYWRkcmVzcyI6IjI3ZDY0YjM1MjRlZjU2NzljNGQ3YzM0OTMwODhjNzA0NzhhNzAwZGIifSwiYXV0aFR5cGUiOiJwaG9uZSIsInByb3ZpZGVyIjoicHJlc3NvbmUiLCJleHAiOjE1NTM0NzYyMzh9.56zuwBenq4Dn2FJt3-8qeqtCdqCEFIs-wFZf5PVV5j8';

  // 初始化 client
  const client3 = new PRS({ env: 'env', debug: true, address: buyerAddress, token: buyerToken});

  const buyRes = client3.contract.createOrder(contractRId, fileRId, 'usage1');
  console.log(buyRes.body);

文档

REST API 和 SDK 的具体使用方法,请参考开发文档

PRS 社区

You can’t perform that action at this time.