Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Solidity开发智能合约

Solidity开发智能合约

原创
作者头像
JavaEdge
发布于 2024-07-28 12:18:05
发布于 2024-07-28 12:18:05
24000
代码可运行
举报
文章被收录于专栏:区块链与Web3.0区块链与Web3.0
运行总次数:0
代码可运行

流计算 Oceanus 简介

流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点的企业级实时大数据分析平台。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。

本文将为您详细介绍如何实时获取 CKafka 中的 JSON 格式数据,经过数据抽取、平铺转换后存入 MySQL 中。

前置准备

创建流计算 Oceanus 集群

在流计算 Oceanus 产品活动页面 1 元购买 Oceanus 集群

进入 Oceanus 控制台 [1],点击左侧【集群管理】,点击左上方【创建集群】,具体可参考 Oceanus 官方文档 创建独享集群 [2]。

创建消息队列 CKafka

进入 CKafka 控制台 [3],点击左上角【新建】,即可完成 CKafka 的创建,具体可参考 CKafka 创建实例 [4]。

创建 Topic

进入 CKafka 实例,点击【topic 管理】>【新建】,即可完成 Topic 的创建,具体可参考 CKafka 创建 Topic [5]。

数据准备

进入同子网的 CVM 下,启动 Kafka 客户端,模拟发送数据,具体操作参见 运行 Kafka 客户端 [6]。

代码语言:json
AI代码解释
复制
// 数据格式
{
  "id": 1,
  "message": "流计算 Oceanus 1元限量秒杀活动",
  "userInfo": {
      "name": "张三",
      "phone": ["12345678910", "8547942"]
      },
  "companyInfo": {
      "name": "Tencent",
      "address": "深圳市腾讯大厦"
      }
}

创建 MySQL 实例

进入 MySQL 控制台 [7],点击【新建】。具体可参考官方文档 创建 MySQL 实例 [8]。

代码语言:sql
AI代码解释
复制
-- 建表语句
CREATE TABLE `oceanus_advanced2` (
  `id`              int (100) NOT NULL,
  `message`         varchar (100) NULL DEFAULT '',
  `name`            varchar (50)  NULL DEFAULT '',
  `phone`           varchar (11)  NULL DEFAULT '',
  `company_name`    varchar (100) NULL DEFAULT '',
  `company_address` varchar (100) NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE = innodb

流计算 Oceanus 作业

1. 创建 Source
代码语言:sql
AI代码解释
复制
CREATE TABLE `kafka_json_source_table` (
    `id`             INT,
    `message`        STRING,
    `userInfo`       ROW<`name` STRING,`phone` ARRAY<STRING>>,  -- 采用 ROW 嵌套 ARRAY 格式接收 JSON 字段
    `companyInfo`    MAP<STRING,STRING>    -- 采用 MAP 格式接收 JSON 字段
) WITH (
  'connector' = 'kafka',
  'topic' = 'oceanus_advanced2',                      -- 替换为您要消费的 Topic
  'scan.startup.mode' = 'earliest-offset',            -- 可以是 latest-offset/earliest-offset/specific-offsets/group-offsets/timestamp 的任何一种
  'properties.bootstrap.servers' = '10.0.0.29:9092',  -- 替换为您的 Kafka 连接地址
  'properties.group.id' = 'testGroup',                -- 必选参数, 一定要指定 Group ID
  'format' = 'json',                                  -- 定义 JSON 格式,部分其他格式可能不支持抽取平铺
  'json.fail-on-missing-field' = 'false',             -- 如果设置为 false, 则遇到缺失字段不会报错。
  'json.ignore-parse-errors' = 'true'                 -- 如果设置为 true,则忽略任何解析报错。
);
2. 创建 Sink
代码语言:sql
AI代码解释
复制
CREATE TABLE `jdbc_upsert_sink_table` (
    `id`                INT,
    `message`           STRING,
    `name`              STRING,
    `phone`             STRING,
    `company_name`      STRING,
    `company_address`   STRING
) WITH (
    'connector' = 'jdbc',
    'url' = 'jdbc:mysql://10.0.0.158:3306/testdb?rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai',         -- 请替换为您的实际 MySQL 连接参数
    'table-name' = 'oceanus_advanced2',    -- 需要写入的数据表
    'username' = 'root',                   -- 数据库访问的用户名(需要提供 INSERT 权限)
    'password' = 'Tencent123$',            -- 数据库访问的密码
    'sink.buffer-flush.max-rows' = '200',  -- 批量输出的条数
    'sink.buffer-flush.interval' = '2s'    -- 批量输出的间隔
);
3. 编写业务 SQL
代码语言:sql
AI代码解释
复制
INSERT INTO `jdbc_upsert_sink_table`
SELECT
id                        AS  id,
message                   AS  message,
userInfo.name             AS  name,              -- 获取 Row 中成员采用.成员的方式
userInfo.phone[1]         AS  phone,             -- 获取 Array 中成员采用 [数组下标] 的方式
companyInfo['name']       AS  company_name,      -- 获取 Map 中成员采用 ['属性名'] 的方式
companyInfo['address']    AS  company_address
FROM `kafka_json_source_table`;

新版 Flink 1.13 集群无需用户选择内置 Connector,平台自动匹配获取

总结

本文详细介绍了如何通过 SQL 作业定义和获取 MAP、ARRAY、ROW 类型数据。更多内置运算符和函数请参考 Oceanus 官方文档 [9]。

参考链接

[1] Oceanus 控制台:https://console.cloud.tencent.com/oceanus/overview

[2] 创建独享集群:https://cloud.tencent.com/document/product/849/48298

[3] CKafka 控制台:https://console.cloud.tencent.com/ckafka/index?rid=1

[4] CKafka 创建实例:https://cloud.tencent.com/document/product/597/54839

[5] Ckafka 创建 Topic:https://cloud.tencent.com/document/product/597/54854

[6] 运行 Kafka 客户端:https://cloud.tencent.com/document/product/597/56840

[7] MySQL 控制台:https://console.cloud.tencent.com/cdb

[8] 创建 MySQL 实例:https://cloud.tencent.com/document/product/236/46433

[9] 内置运算符和函数:https://cloud.tencent.com/document/product/849/18083

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Solidity 文档--第三章:Solidity 编程实例
接下来的合约非常复杂,但展示了很多Solidity的特性。它实现了一个投票合约。当然,电子选举的主要问题是如何赋予投票权给准确的人,并防止操纵。我们不能解决所有的问题,但至少我们会展示如何委托投票可以同时做到投票统计是自动和完全透明。
程序新视界
2022/05/06
3410
<Solidity学习系列一>根据例子学习Solidity
声明:本系列文章是自己在http://solidity-cn.readthedoc... 学习solidity时,因为英语水平不够,被迫用谷歌粗略翻译的。仅为了方便学习,中间肯定有很多错误的地方。请勘误。
Charlie_W
2018/10/19
5030
以太坊Dapp终极教程——如何构建一个完整的全栈去中心化应用(三) 原
在以太坊Dapp终极教程——如何构建一个完整的全栈去中心化应用(一)中,我们已经完成了一切所需的设置;在以太坊Dapp终极教程——如何构建一个完整的全栈去中心化应用(二)中,让我们通过列出将在选举中运行的候选人来继续构建智能合约并完成客户端程序。下面我们来完成投票部分,现在让我们添加在选举中投票的能力。
笔阁
2019/06/01
6130
如何编写一个投票功能的智能合约
前面一篇文章带你用一个简单的模拟银行的合约讲解了solidity的基本语法特性。你大概已经对如何编写智能合约有了基本的认识。但是要编写产品级别的智能合约,只有这些基础是远远不够的。
用户7634691
2023/02/24
6310
如何编写一个投票功能的智能合约
第十课 Solidity语言编辑器REMIX指导大全
【本文目标】 本文翻译和实践Solidity语言编辑器REMIX官网帮助文档,但并不拘泥于逐字翻译,而时根据实践用中文语言讲透编辑器相关功能。 【前置条件】 了解以太坊ETH和Solidity语言。 【技术收获】 1). 使用REMIX编辑器进行Solidity语言编程,编译,运行,调试。 2). REMIX界面介绍
辉哥
2018/08/10
2.4K0
第十课 Solidity语言编辑器REMIX指导大全
智能合约用solidity编程语言开发一个以太坊应用区块链投票实例
智能合约开发用solidity编程语言部署在以太坊这个区块链平台,本文提供一个官方实战示例快速入门,用例子深入浅出智能合约开发,体会以太坊构建去中心化可信交易技术魅力。智能合约其实是“执行合约条款的计算机交易协议”。区块链上的所有用户都可以看到基于区块链的智能合约。
笔阁
2018/09/04
1.1K0
​【刘文彬】【精解】开发一个智能合约
原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/contract.html
圆方圆学院
2018/12/26
1.6K0
学习以太坊Dapp开发
比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量。既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链上的行为(包括比特币的运营,亦或是运行在区块链上的其他业务),这种机制就是共识机制。在完全去中心化的区块链上运行的比特币,采用的是PoW(Proof of Work,工作量证明),该机制完美的解决了拜占庭将军问题(存在异常的情况下仍能达成一致)。因为基础网络架构为分布式,对单独一个节点是无法控制或破坏整个网络,掌握网内51%的运算能力(非节点数)才有可能操作交易,而这个代价大概要超过270亿美元。
笔阁
2018/09/04
8000
学习以太坊Dapp开发
web3.js中estimateGas如何计算智能合约消耗的gas量
我们可使用web3.js框架的estimateGas函数获得一个以太坊智能合约的Gas估计值 ,通过执行一个消息调用或交易,该消息调用或交易直接在节点的VM中执行,并未在区块链中确认,函数会返回估算使用的gas量。
笔阁
2018/09/04
5.7K0
web3.js中estimateGas如何计算智能合约消耗的gas量
交易所对接以太坊钱包服务设计与实现
交易所钱包服务是加密货币交易所系统中的重要组成部分,它负责与各种不同的区块链的交互,实现用户地址生成、充值与提现等功能。本文以对接以太坊区块链的钱包服务为例,介绍交易所系统平台中钱包管理服务的设计与实现。
用户1408045
2019/08/09
2.9K0
solidity 合约入门
下面是一个简单的 Solidity 合约示例,它实现了一个简单的数字存储合约,允许用户设置和获取一个整数值。这个合约将帮助你了解 Solidity 合约的基本结构和语法。
孟斯特
2023/10/19
3170
solidity 合约入门
以太坊智能合约开发DApp应用示例
智能合约开发是以太坊的核心,学习过程主要是搭建以太坊开发环境和solidity语言的编程。本文不用任何以太坊Dapp框架,直接在ganache下开发智能合约。
笔阁
2018/09/04
9690
以太坊智能合约开发DApp应用示例
[教程] 使用 Embark 开发投票 DApp
前面我们基于Embark Demo[1] 介绍了 Embark 框架,今天使用 Embark 来实实在在开发一个 DApp:从零开发开发一个投票DApp。
Tiny熊
2020/03/26
8580
以太坊一种可升级的可信存证智能合约设计与实现
存证作为区块链的一个重要应用场景,在各个公链中都有已落地的应用和服务。本文将介绍在以太坊上的一种可升级的存证合约的设计与实现。
Tiny熊
2020/06/19
1K0
以太坊一种可升级的可信存证智能合约设计与实现
V神绞尽脑汁开发Vyper,Python、Solidity要失宠?十分钟,看完这份12岁儿童都能看懂的智能合约指南,你就明白了…
全新的以太坊语言Vyper已经发布,并在社交媒体上引起热议。Vyper是由废弃语言Serpent升级而来,为开发者们提供了可以替代Solidity语言的一种选择。
区块链大本营
2018/08/03
1.4K0
V神绞尽脑汁开发Vyper,Python、Solidity要失宠?十分钟,看完这份12岁儿童都能看懂的智能合约指南,你就明白了…
Solidity 智能合约开发 - 玩转 Web3.py
在前文《Solidity 智能合约开发 - 基础》中,我们学习了 Solidity 的基本语法,并且了解了可以通过 Brownie 与 HardHat 等框架进行调试。但在使用这些封装好的框架之前,我们可以通过 Web3.py 直接与我们本地的 Ganache 节点进行交互,以便更好了解其原理,也为我们后续更好使用框架打好基础。
pseudoyu
2023/04/11
1.5K0
Solidity 智能合约开发 - 玩转 Web3.py
Python在区块链开发与智能合约编写中的实战应用
区块链技术正逐渐成为各行各业的焦点,而Python作为一种灵活且强大的编程语言,被广泛应用于区块链开发和智能合约编写。本文将介绍如何利用Python进行区块链开发以及智能合约的编写,并提供代码实例来帮助读者更好地理解这些概念。
一键难忘
2024/08/14
4200
Windows环境下跑通Truffle开发环境
最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能透露课程的内容,但我会在steemit上不断地记录我的成长过程。 https://steemit.com/cn/@speeding/smart-contract-development0 Ethereum上的智能合约开发对Windows不太友好,培训课上的所有例子都是运行在老师提前安装好的一个Ubuntu虚拟机上,为了加深对课程的印象,我在Windows上把Truffle等安装过程跑了一遍。 一、几个术语介绍 ---- 1、
申龙斌
2018/03/06
3.2K0
Windows环境下跑通Truffle开发环境
以太坊开发教程
如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动开发教程: 以太坊DApp实战入门教程 以太坊去中心化电商应用开发实战 在这个教程中,让我们构建一个简单的"Hello World!" 应用程序, 这是一个投票应用程序。 该应用程序非常简单,它所做的只是初始化一组候选人,让任何人投票给候选人,并显示每个候选人收到的总票数。 我有意避免使用任何DAPP框架构建这个应用程序,因为框架抽象掉很多细节,你不了解系统的内部。此外,当你使用框架时,将对框架所做的繁重工作有更多的体会! 这个开
用户1408045
2018/05/17
1.6K0
开发基于以太坊智能合约的DApp
最近要找个H5的前端写个简单的DApp,聊过几个H5的工程师,都被跟以太坊交互的部分吓住了。虽然网上有N多的教程,但是对于H5工程师来说,还是有些困难。分析其原因,在于不了解ganache-cli(原来叫testrpc)/web3/以太坊节点/metamask之间的架构关系。
笔阁
2018/09/04
1.3K0
推荐阅读
相关推荐
Solidity 文档--第三章:Solidity 编程实例
更多 >
交个朋友
加入腾讯云技术交流站
洞悉AI新动向 Get大咖技术交流群
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档