合约相关
获取合约模板
PRS 提供了合约模板,用户获取到模板进行修改之后,即可创建合约。
GET /api/v2/contracts/templates
curl -X GET 'https://beta.press.one/api/v2/contracts/templates?type=text' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo"
type
: query string 参数,'type=text'为文章授权购买模板,'type=image'为图片授权购买模板。
合约模板格式
PRSC Ver 0.1
Name 文章的授权购买
Desc 你购买的授权许可不具备排他性,不可再授权,不可转让。\\n不得直接转售、分销、共享、转让、出租这些数字内容,不得提供下载,不可嵌入服务器,不可包含在网页模板或设计模板中。\\n不得以明示或暗示的方式虚假声明你购买的该数字内容是由你或其它人所创建,或虚假声明你或其他人对你购买的该数字内容持有著作权。\\n不可将所购买的数字内容用于任何非法、淫秽、诽谤、虚假内容之中,或用于会被认为是非法、淫秽、诽谤、虚假内容的方式。
Receiver becd34540fefeab83730ffb479e98ee12fa1337e
License usage1 PRS:0.1 Terms: 个人授权许可,只能用于个人目的的转载、 引用、结集。\\n你可以全文或部分转载你购买的文本内容,或在不改变作者原意和立场的情况下编辑文本。任何情况下必须标明原文作者及出处。不标记原作者或出处通常会被视为剽窃行为。\\n不可用于商业用途(包括且不限于政府、 教育、 商业机构、非营利组织、社会团体、经营类网站及其它以营利为目的的组织机构或服务)。
License usage2 PRS:0.5 Terms: 商用授权许可,用于营利、 商业或经营目的转载、 引用、结集。如:\\n- 用于网站、软件、移动应用、社交媒体、邮件、电子书\\n- 用于印刷媒体如 杂志、 报纸、 书籍\\n- 用于广告、市场活动、宣传推广用途的内容\\n你可以全文或部分转载你购买的文本内容,或在不改变作者原意和立场的情况下编辑文本。任何情况下必须标明原文作者及出处。不标记原作者或出处通常会被视为剽窃行为。
上面是 V1 版本 PRS 合约模板:
Name
: 合约名称。Desc
: 合约描述。Receiver
: 收款人地址,目前版本合约收款人必须为合约创建者。License
: 合约用途。License ${license-id} ${currency}:${amount} Terms: ${text}
license-id
: 用户的 id,合约内唯一,用于合约购买时区分用途。currency
: 币种,目前支持 PRS 和 CNB,其中 CNB 为测试用途。amount
: Token 金额。text
: 条款内容。
注意:创建合约时合约描述以及用途条款文本中的换行符 \n
需要转换为\\n
,显示时可以再转换回来。
创建合约
合约的数据也会存储在 PRS 链上,所以必须符合 PRS 协议,同时 PRS 也会对合约源码得格式进行验证,符合协议才可以创建合约。
下面是创建合约的过程:
使用
keccak256
对合约源码进行 hash 计算,获取 filehash。根据 PRS 协议对合约数据的规定,进行 data 数据组合。
data: {
file_hash: 'f8cc08d02ef57b2a6bc4f08c0b26c00658435c7013cda4fd6e0ca8385f987030'
}
- 对 data 进行数字签名,获取
hash
、signature
。
curl -X POST https://beta.press.one/api/v2/sign \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo" \
-d '{ "payload": { "data": { "file_hash": "f8cc08d02ef57b2a6bc4f08c0b26c00658435c7013cda4fd6e0ca8385f987030" } } }'
- 调用创建合约接口创建合约。
POST /api/v2/contracts
payload
参数 | 类型 | 备注 |
---|---|---|
code | string | 合约源码 |
signature | string | 步骤 3 得到的 signature |
curl -X POST https://beta.press.one/api/v2/contracts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo" \
-d '{ "payload": { "code": "PRSC Ver 0.1\n Name 购买授权\n Desc 这是一个\\n测试合约\n Receiver 24bb85b2a2e72af849e8a83e9f2fce1d7f9f6685\n License usage1 CNB:0.001 Terms: 这是个人使用条款,禁止\\n商业应用。\n License usage2 CNB:0.002 Terms: 这是商业使用条款,允许\\n修改和复制。", "signature": "65fdb2a8d18957e66f5a8f27a78aff0152765872ec308b837c4650d4b8f1b88dca796c15885ac44b1231c51c244561043754a5a7a9e2c3bc5c224ad413a292ea0" } }'
为签名文件绑定合约
合约的绑定数据也会存储在 PRS 链上,下面是绑定合约的过程:
- 根据 PRS 协议对合约数据的规定,进行 data 数据组合。
data: {
beneficiary_address: '24bb85b2a2e72af849e8a83e9f2fce1d7f9f6685',
content_id: '8b6885661754208a27d1aa3e23798e5e672c9fd856be2d8bf62d3b41c6f85424',
contract_id: '6d21afd769ee7b6de4dea2835f5382580f38e9b068b317698f583478594e7d46',
}
beneficiary_address
: 收款人 address,必须与合约创建者相同。content_id
: 需要绑定签名文件的 rId。contract_id
: 合约的 rId。
- 对 data 进行数字签名,获取
hash
、signature
。
curl -X POST https://beta.press.one/api/v2/sign \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo" \
-d '{ "payload": { "data": { "beneficiary_address": "24bb85b2a2e72af849e8a83e9f2fce1d7f9f6685", "content_id": "8b6885661754208a27d1aa3e23798e5e672c9fd856be2d8bf62d3b41c6f85424", "contract_id": "6d21afd769ee7b6de4dea2835f5382580f38e9b068b317698f583478594e7d46" } } }'
- 调用绑定合约接口进行绑定。
POST /api/v2/contracts/${contractRId}/bind
contractRId
: 合约的 rId。
payload
参数 | 类型 | 备注 |
---|---|---|
fileRId | string | 需要绑定签名文件的 rId |
signature | string | 步骤 2 得到的 signature |
curl -X POST https://beta.press.one/api/v2/contracts/6d21afd769ee7b6de4dea2835f5382580f38e9b068b317698f583478594e7d46/bind \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo" \
-d '{ "payload": { "fileRId": "8b6885661754208a27d1aa3e23798e5e672c9fd856be2d8bf62d3b41c6f85424", "signature": "65fdb2a8d18957e66f5a8f27a78aff0152765872ec308b837c4650d4b8f1b88dca796c15885ac44b1231c51c244561043754a5a7a9e2c3bc5c224ad413a292ea0" } }'
根据 rId 获取合约详情
GET /api/v2/contracts/${rId}
rId
: 合约 rId
curl -X GET https://beta.press.one/api/v2/contracts/6d21afd769ee7b6de4dea2835f5382580f38e9b068b317698f583478594e7d46 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo"
获取我的合约列表
GET /api/v2/contracts
curl -X GET "https://beta.press.one/api/v2/contracts?offset=0&limit=1" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo"
购买合约
POST /api/v2/orders
contractRId
: 合约的 rId。
payload
参数 | 类型 | 备注 |
---|---|---|
contractRId | string | 合约的 rId |
fileRId | string | 合约绑定的文件 rId |
licenseType | string | 合约用途 |
curl -X POST https://beta.press.one/api/v2/orders \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo" \
-d '{ "payload": { "fileRId": "8b6885661754208a27d1aa3e23798e5e672c9fd856be2d8bf62d3b41c6f85424", "contractRId": "6d21afd769ee7b6de4dea2835f5382580f38e9b068b317698f583478594e7d46", "licenseType": "usage1" } }'
获取指定合约的交易记录
GET /api/v2/contracts/${rId}/orders
rId
: 合约 rId
curl -X GET "https://beta.press.one/api/v2/contracts/6d21afd769ee7b6de4dea2835f5382580f38e9b068b317698f583478594e7d46/orders?offset=0&limit=1" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo"
获取已购合约列表
GET /api/v2/orders
curl -X GET "https://beta.press.one/api/v2/orders?offset=0&limit=1" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1NTIzNTM4MTMsImp0aSI6IjA4OTIxNjZiLTU3OTYtNDk2Yi04NTU0LTAwZTMxOWNhNGU1OCIsImRhdGEiOnsiYXV0aEFkZHJlc3MiOiIyNGJiODViMmEyZTcyYWY4NDllOGE4M2U5ZjJmY2UxZDdmOWY2Njg1In0sInByb3ZpZGVyIjoiZGFwcCJ9.qa76GKlcOHq-4salLQduPs3EHB3xWmlq7JJymYSAMmo"