项目需求2张表:资源表、资源访问记录表,需要资源上链智能合约、访问记录上链智能合约、以及资源所有权转移智能合约。
FISCO BCOS提供合约KV存储接口开发模式,可以通过合约创建表,并对创建的表进行增删改查操作。
所以,针对2表创建两个智能合约即可实现对表的增删改查操作。资源的所有权转移可以通过对资源表的数据属主的修改实现。
1. KVTable合约
Solidity合约只需要引入FISCO BCOS官方提供的Table.sol抽象接口合约文件即可。
webankblockchain-liquid(以下简称WBC-Liquid)合约在实现合约之前对KVTable的接口进行声明使用即可。
Table包含分布式存储专用的智能合约接口,其接口实现在区块链节点,其中,TableManager可以创建专属KV表,KVTable可以用作表进行get/set操作。
使用KV存储预编译合约开发应用 — FISCO BCOS v3 v3.0.0 文档文章来源:https://www.toymoban.com/news/detail-786555.html
1、资源表
resource | |
ipfs_hash(key) | user(value) |
QmUpYtJoyby5jYg9oez8qLpMxqae4pe6rHxsmtWLH2APTZ | 20211165XX |
// SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.6.10 <0.8.20;
pragma experimental ABIEncoderV2;
import "./Table.sol";
contract r_upload{
event RegisterEvent(
int256 ret,
string indexed ipfs_hash,
string indexed user
);
KVTable kvTable;
TableManager tm;
string constant tableName = "resource";
constructor() public {
// 构造函数中创建r_upload表
tm = TableManager(address(0x1002));
// 资产管理表, key : ipfs_hash , field : user
// | 存储hash(主键) | 资源属主 |
// |-------------------- |-------------------|
// | ipfs_hash | user |
// |---------------------|-------------------|
//
// create table
tm.createKVTable(tableName, "ipfs_hash", "user");
// get table address
address t_address = tm.openTable(tableName);
kvTable = KVTable(t_address);
}
/*
描述 : 根据资源hash查询资源属主
参数 :
ipfs_hash : 资源hash
返回值:
参数一: 成功返回0, 账户不存在返回-1
参数二: 第一个参数为0时有效,资源属主
*/
function select(string memory ipfs_hash) public view returns (bool, string memory) {
// 查询
bool result;
string memory user;
(result, user) = kvTable.get(ipfs_hash);
return (result, user);
}
/*
描述 : 资源上链
参数 :
ipfs_hash : 资源hash
user : 资源属主
返回值:
0 资产注册成功
-1 资产账户已存在
-2 其他错误
*/
function register(string memory ipfs_hash, string memory user)
public
returns (int256)
{
int256 ret_code = 0;
bool ret = true;
string memory user_1="2021116579";
// 查询资源是否上链
(ret,user_1) = select(ipfs_hash);
if (ret != true) {
// 不存在,上链
// 插入
int32 count = kvTable.set(ipfs_hash, user);
if (count == 1) {
// 成功
ret_code = 0;
} else {
// 失败? 无权限或者其他错误
ret_code = - 2;
}
} else {
//资源已存在
ret_code = - 1;
}
emit RegisterEvent(ret_code, ipfs_hash, user);
return ret_code;
}
}
文章来源地址https://www.toymoban.com/news/detail-786555.html
到了这里,关于fisco bcos 智能合约开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!