这是一个关于Table的 Solidity 智能合约。该智能合约定义了一些重要的实体和方法,可以用于创建、操作和管理表格数据。
首先是 TableFactory 合约,用于创建和打开表格。其中包含:
openTable(string) 方法用于打开一个已经存在的表格并返回该表格实例 TablecreateTable(string, string, string) 方法用于创建一个新的表格,并需要传入三个参数:表格名、主键名、存储引擎类型接下来是一个 Condition 合约,用于设置查询条件。其中包含:
然后是一个 Entry 合约,代表表格中的一行数据记录。它提供了获取和设置各种类型的数据值的方法,如整数、无符号整数、地址、字符串等。
最后是一个 Table 合约,包括以下方法:
select(string, Condition) 方法用于根据查询条件选择表格中的数据记录insert(string, Entry) 方法用于往表格中插入一条新的数据记录update(string, Entry, Condition) 方法用于根据给定的查询条件更新表格中的数据记录remove(string, Condition) 方法用于根据给定的查询条件删除表格中的数据记录newEntry() 方法用于创建一个新的数据记录实例newCondition() 方法用于创建一个新的查询条件实例另外还有一个 KVTableFactory 合约,用于创建和打开键值表。其中包含:
openTable(string) 方法用于打开一个已经存在的键值表并返回该表格实例 KVTablecreateTable(string, string, string) 方法用于创建一个新的键值表,并需要传入三个参数:表格名、主键名、存储引擎类型最后是一个 KVTable 合约,代表键值表中的一行数据记录。它提供了获取和设置键值对数据的方法,其中 key 的类型为字符串,value 的类型为 Entry。
pragma solidity ^0.4.24;
contract TableFactory {
function openTable(string) public view returns (Table); //open table
function createTable(string, string, string) public returns (int256); //create table
}
//select condition
contract Condition {
function EQ(string, int256) public view;
function EQ(string, string) public view;
function EQ(string, address) public view;
function NE(string, int256) public view;
function NE(string, string) public view;
function GT(string, int256) public view;
function GE(string, int256) public view;
function LT(string, int256) public view;
function LE(string, int256) public view;
function limit(int256) public view;
function limit(int256, int256) public view;
}
//one record
contract Entry {
function getInt(string) public view returns (int256);
function getUInt(string) public view returns (uint256);
function getAddress(string) public view returns (address);
function getBytes64(string) public view returns (bytes1[64]);
function getBytes32(string) public view returns (bytes32);
function getString(string) public view returns (string);
function set(string, int256) public;
function set(string, uint256) public;
function set(string, string) public;
function set(string, address) public;
}
//record sets
contract Entries {
function get(int256) public view returns (Entry);
function size() public view returns (int256);
}
//Table main contract
contract Table {
function select(string, Condition) public view returns (Entries);
function insert(string, Entry) public returns (int256);
function update(string, Entry, Condition) public returns (int256);
function remove(string, Condition) public returns (int256);
function newEntry() public view returns (Entry);
function newCondition() public view returns (Condition);
}
contract KVTableFactory {
function openTable(string) public view returns (KVTable);
function createTable(string, string, string) public returns (int256);
}
//KVTable per permiary key has only one Entry
contract KVTable {
function get(string) public view returns (bool, Entry);
function set(string, Entry) public returns (int256);
function newEntry() public view returns (Entry);
}
使用 Solidity 语言编写的工具类,基于给出的 Table 合约,可以进行数据操作,包括对表格中数据的 CRUD 操作。
该工具类包含以下方法:
constructor: 构造函数,用于初始化工具类实例,需要传入 TableFactory 实例、表格名和主键名。通过表格名和主键名打开表格实例。createTable: 创建新表格,在当前数据库中创建一张新表格,需要传入存储引擎类型,返回新建表的 ID。selectByID: 根据给定的主键 ID 查询表格数据,返回查询结果的第一行数据记录。selectByCondition: 根据给定的查询条件查询表格数据,返回符合条件的所有数据记录。insertEntry: 向表格中插入一条新的数据记录,需要传入数据记录实例,返回新增记录的 ID。updateByID: 根据给定的主键 ID 更新表格中的数据记录,需要传入需要更新的数据记录实例,返回影响的记录数。removeByID: 根据给定的主键 ID 删除表格中的数据记录,返回影响的记录数。需要注意的是,在方法调用前,需要确保已经打开了正确的表格实例,并且已经传入正确的表格名和主键名。
pragma solidity ^0.8.0;
import "./Table.sol";
contract TableUtils {
TableFactory private tableFactory;
Table private table;
string private tableName;
string private primaryKey;
// 构造函数,用于初始化工具类实例
constructor(TableFactory factory, string memory name, string memory key) {
tableFactory = factory;
tableName = name;
primaryKey = key;
// 打开表格实例
table = tableFactory.openTable(tableName);
}
// 获取当前打开的表格实例
function getTable() external view returns (Table) {
return table;
}
// 在当前数据库中创建一张新表格
function createTable(string memory engineType) external returns (int256) {
return tableFactory.createTable(tableName, primaryKey, engineType);
}
// 根据给定的主键 ID 查询表格数据,返回查询结果的第一行数据记录
function selectByID(int256 id) external view returns (Entry memory) {
Condition condition = table.newCondition();
condition.EQ(primaryKey, id);
Entries entries = table.select("", condition);
require(entries.size() == 1, "Record not found");
return entries.get(0);
}
// 根据给定的查询条件查询表格数据,返回符合条件的所有数据记录
function selectByCondition(Condition condition) external view returns (Entries memory) {
return table.select("", condition);
}
// 向表格中插入一条新的数据记录,需要传入数据记录实例,返回新增记录的 ID
function insertEntry(Entry memory entry) external returns (int256) {
return table.insert("", entry);
}
// 根据给定的主键 ID 更新表格中的数据记录,需要传入需要更新的数据记录实例,返回影响的记录数
function updateByID(int256 id, Entry memory entry) external returns (int256) {
Condition condition = table.newCondition();
condition.EQ(primaryKey, id);
return table.update("", entry, condition);
}
// 根据给定的主键 ID 删除表格中的数据记录,返回影响的记录数
function removeByID(int256 id) external returns (int256) {
Condition condition = table.newCondition();
condition.EQ(primaryKey, id);
return table.remove("", condition);
}
}
使用 TableUtils 工具类的示例。首先,需要在合约中进行实例化,并传入正确的参数:
pragma solidity ^0.8.0;
import "./TableFactory.sol";
import "./TableUtils.sol";
contract MyContract {
TableFactory private tableFactory;
TableUtils private utils;
// 构造函数,用于初始化合约实例和工具类实例
constructor(TableFactory factory) {
tableFactory = factory;
utils = new TableUtils(tableFactory, "my_table", "id");
}
// 创建新表格,并返回新建表的 ID
function createTable() external returns (int256) {
return utils.createTable("BASIC");
}
// 向表格中插入一条新的数据记录,并返回新增记录的 ID
function insertData(string memory name, uint256 value) external returns (int256) {
Entry memory entry = utils.getTable().newEntry();
entry.set("name", name);
entry.set("value", int256(value));
return utils.insertEntry(entry);
}
// 根据给定的主键 ID 更新表格中的数据记录,需要传入需要更新的数据记录实例,返回影响的记录数
function updateData(int256 id, string memory name, uint256 value) external returns (int256) {
Entry memory entry = utils.getTable().newEntry();
entry.set("name", name);
entry.set("value", int256(value));
return utils.updateByID(id, entry);
}
// 根据给定的主键 ID 删除表格中的数据记录,返回影响的记录数
function removeData(int256 id) external returns (int256) {
return utils.removeByID(id);
}
// 根据给定的主键 ID 查询表格中的数据记录,并返回查询结果
function getDataByID(int256 id) external view returns (string memory, uint256) {
Entry memory entry = utils.selectByID(id);
return (entry.getString("name"), uint256(entry.getInt("value")));
}
// 根据给定的查询条件查询表格中的数据记录,并返回查询结果
function getDataByCondition() external view returns (string[] memory, uint256[] memory) {
Condition condition = utils.getTable().newCondition();
Entries entries = utils.selectByCondition(condition);
string[] memory names = new string[](uint256(entries.size()));
uint256[] memory values = new uint256[](uint256(entries.size()));
for (int256 i = 0; i < entries.size(); i++) {
Entry memory entry = entries.get(i);
names[uint256(i)] = entry.getString("name");
values[uint256(i)] = uint256(entry.getInt("value"));
}
return (names, values);
}
}
在这个示例中,我们首先创建了一个名为 MyContract 的合约,在构造函数中初始化并传入了一个 TableFactory 实例。然后,使用该工厂实例创建了一个名为 my_table 的表格,并指定主键名为 id。
接下来定义了一些方法,用于对表格数据进行 CRUD 操作。例如,insertData 方法可以向表格中插入一条新的数据记录,并返回新增数据的 ID;getDataByID 方法可以根据给定的主键 ID 查询表格中的数据记录,并返回查询结果。
需要注意的是,所有涉及到对表格数据进行操作的方法,都需要通过 TableUtils 工具类实例来调用。在每个方法中,都需要先获取正确的表格实例,并根据需要创建、设置和读取数据记录实例。最后,再将数据记录实例作为参数,调用相应的方法进行数据操作。
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我正在尝试上传文件。一个简单的hello.txt。我正在关注文档,但无法将其上传到我的存储桶。#STARTAWSCLIENTs3=Aws::S3::Resource.newbucket=s3.bucket(BUCKET_NAME)begins3.buckets[BUCKET_NAME].objects[KEY].write(:file=>FILE_NAME)puts"Uploadingfile#{FILE_NAME}tobucket#{BUCKET_NAME}."bucket.objects.eachdo|obj|puts"#{obj.key}=>#{obj.etag}"endresc
我有一个Highstock图表(带有标记和阴影的线条),并且想以编程方式显示一个highstock工具提示,例如,当我选择某个表上的一行(包含图表数据)我想显示相应的highstock工具提示。这可能吗? 最佳答案 股票图表thissolution不起作用:在thisexample你必须更换这个:chart.tooltip.refresh(chart.series[0].data[i]);为此:chart.tooltip.refresh([chart.series[0].points[i]]);解决方案可用here.
前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
一、机器人介绍 此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是