当前位置: 首页 > 编程日记 > 正文

如何开发一个区块链应用程序

区块链是一项巧妙的发明,有望使数字世界更加安全和分散。通过允许数字信息的分发而不是复制,区块链技术创建了一种新型互联网。最初是为数字货币比特币而设计的,现在科技界正在寻找该技术的其他潜在用途。在不久的将来,我们将看到区块链被用于各种日常交易,无论是银行交易,还是电子商务网站购物。

技术世界的每个人都了解或至少听说过区块链。但是只有极少数的开发人员知道如何开发区块链代币或应用程序,或者从哪里开始。让我们稍微详细地看看区块链应用程序的开发过程。

区块链开发简介

现在,我假设您已经了解了区块链的基础知识,即区块链是什么,它起源于何处,可以在何处使用。

与其他开发过程一样,区块链应用程序或代币开发也需要我们描述应用程序的范围和用途。它可以是像比特币这样的一枚代币,也可以是一份精明的房地产合同或其他东西。让我们看看这些实际发展的前提步骤

  1. 发展的观点

第一步是决定——我想用区块链做什么?

如果你想用区块链来为一个自制的业余应用程序存储用户资料,你可能走错了路。即使你希望使用区块链获得一个中等大小的应用程序,你也需要权衡区块链的利润与成本。您需要为您的应用程序确定用例,并确保您的想法是否需要区块链。需要注意的是,区块链是一种加密数据和验证事务的方法,如果实现不正确,它不能保证交易上的额外安全性。

一旦您得出区块链对您的项目是必不可少的结论,您就需要认识到区块链的开发是昂贵的。有几种开发区块链应用程序的方法,下一节将讨论这些方法,它们的成本和功能各不相同。

区块链使用作为一个有效的例子, 如果您是一个房地产代理,并希望构建一个基于区块链的供应链应用程序,该应用程序可以为您出售的每个属性保留一个分类账,那么您应该了解应用程序的多个用例,以及它将如何为您的业务和消费者带来好处。

  1. 确定合适的区块链平台

一旦您认为您的业务需要基于区块链,您就需要确定要使用的合适平台或技术。有几种基本方法可以解决

a. 创建新的区块链——您可以选择创建自己的区块链框架,其中从算法到事务验证,从技术堆栈到代币交易费,一切都由您决定。这是最全面的区块链开发方式,也是最昂贵的。你实际上是在考虑创造另一种比特币,尽管听起来有利可图,但它可能会让你花费数十万美元以上的资金。通常只有在创建自己的加密货币时才会选择此选项。

b. 克隆流行的区块链平台 ——开发基于区块链的应用程序的另一种更有效的方法是使用流行的区块链平台进行开发。这些平台是开源的,因此您可以使用它们的存储库并将代码部署到自己的服务器上。我们要问的主要问题是——为什么这个世界会接受你创建的区块链。请记住,区块链平台与网络中能够验证事务的节点数量一样成功。

流行的平台有以太坊、Hyperledger Fabric和Hyperledger SawTooth。每一个都有特定的特点,可以帮助你做出决定。

最受欢迎的区块链平台是以太坊,它可以保存你的代币发展)。关于以太坊的几点:

· 以太坊是一个开源的、基于公共区块链的分布式计算平台,具有智能合约的功能。 · 以太坊使用了一种名为“Ethash”的工作验证算法,这种算法需要更多内存,因此难以进行挖掘。 · 以太坊中的智能合约是用可靠的编程语言 Solidity 编写的,这是Javascript的一个子集。

c. 在现有的区块链平台上使用代币——这与上一点稍有不同。最后一点,我们克隆了整个区块链平台并将其部署到我们自己的服务器上,假设我们有足够的网络节点,这些节点将通过“挖掘”来验证交易。

但我们也可以“创建代币”,并将其部署到像以太坊这样正在运行的区块链上。这些平台提供了现成的api、算法和挖掘策略,以便在应用程序中轻松实现区块链(区块链即服务)。您不需要为您的交易创建单独的waller,因为以太坊代币可以被各种现有的钱包接受。

这类似于在Shopify上创建自己的电子商务商店。Shopify平台上的所有电子商务功能都可以随时使用,用户只需填写所需数据,就可以在Shopify上创建自己的商店。类似地,您可以用可靠语言编写自己的令牌,并将其部署在以太坊上(或者为不同的区块链平台使用不同的语言)。现有的平台将为您提供现成的服务,您可以使用代币进行交易。记住,代币可以是代币,也可以是智能合约。

3.原型开发

鉴于区块链的开发成本非常高,建议在将其部署到实时服务器或现有的区块链平台(如以太坊)上之前,首先开发一个原型应用程序,以确保一切正常工作。

在原型开发期间,您还应该决定应用程序的哪些部分是“on-chain”的,哪些是“off-chain”的。简单地说,由于您正在创建一个使用区块链的web应用程序或移动应用程序,因此可以在一般的云托管上运行正常的功能,而不需要区块链。然后是应用程序的交易部分,您可能会将其放在区块链平台上。

您还应该决定应用程序(或其部分)是构建在许可网络中,还是构建在无许可网络中。

· 无许可的网络:在这里,每个人都可以加入并开始验证。最著名的例子是比特币和以太坊网络 · 许可的网络。在这种情况下,网络所有者决定谁可以加入网络,只允许少数成员验证块。协商一致机制可以与无许可网络相同,也可以是完全独特的设计(例如基于权限的)。

尽量将链上api与链外api分开,因为它们将驻留在不同的位置。决定应用程序的一致算法和事务策略。如果您使用的是现有的区块链平台,那么这个阶段将更容易,因为许多东西已经在这些平台中有效地实现了。

  1. 技术

. web3.js - Ethereum JavaScript API(文档) . Dapp浏览器-Desktop Mist, Parity 、 Metamask 和mobile ones Toshi, Cipher 和Trust . 智能合约的稳固性(文件编制) . 开放Zepplin -智能合约开发(文档) . 从事-无服务器分散式应用使用Ethereum, IPFS和其他平台https://embark.status.im/ . 最流行的Ethereum开发和测试框架http://truffleframework.com . Metamask -在浏览器中运行Ethereum dApp而不需要运行完整的Ethereum节点(https://metamask.io/) . Parity -最先进的Ethereum部署客户端(https://paritytech.io/) . Etherscan - Ethereum上的块资源管理器,用于监视(https://etherscan.io/)

除此之外,常规框架还可以用于像react这样的应用程序/服务器开发。用于移动应用的js、nodejs和原生技术。

  1. 发展

这是区块链应用程序开发的核心元素。为了简单起见,我们将经历2c点中描述的过程。如上所述,即在现有的区块链平台上使用代币。首先理解事务机制是很重要的。

Token本质上是一个长长的字母数字字符串,充当您智能合约的唯一标识符。区块链钱包上的每个用户都有唯一的公钥和私钥(类似于长密码)。这些键用于识别用户的信用卡/借记卡,或指向智能合约。这是非常类似的,但比添加一个新的受益人在您的银行帐户使用他们的银行帐号等更安全。

您可以为以太坊创建自己的智能合约或代币。您应该首先创建一个测试代币,并在将其部署到真实的区块链上之前验证您的功能。遵循这个官方指南来创建您的第一个以太坊代币,以及这篇博客文章来理解创建您自己代币的细微差别。一旦您创建了代币,您就将其“放在链上”,本质上类似于在服务器上部署代码。

交易开始时,一个用户发送一个发送代币的意图,该意图被网络确认为有效(如果您拥有代币且没有将其发送给任何人)。然后您的代币信息与您的私钥相结合,私钥将吐出一个数字代码,然后使用发送方的公钥由网络确认。这是可能的,因为可以用公钥验证与私钥签署的合约,但是无法发现公钥与私钥之间的相关性,因此一切都是安全的。

总之,整个过程类似于加密和解密。信息的分散化和块的历史包含在加密中,使其安全和篡改证明。

此外,您将为其构建API

-执行审计职能。 -储存和检索数据。 -生成密钥对并将其映射到特定地址。 -利用哈希值和数字签名进行数据认证。 -管理和触发智能合约以运行应用程序的业务功能。

这篇文章是构建区块链应用程序的第一步。让智能合约“更智能”、确保你的代币不可被黑客攻击,或者至少极其难以被黑客入侵,这些都涉及到巨大的复杂性。按照上面的步骤,您可以为您的应用程序制作基于区块链的最小可行产品

相关文章:

python数据结构与算法:栈

栈: Stack() 创建一个新的空栈 push(item) 添加一个新的元素item到栈顶 pop() 弹出栈顶元素 peek() 返回栈顶元素 is_empty() 判断栈是否为空 size() 返回栈的元素个数 Stack() 创建一个新的空栈 push(item) 添加一个新的元素item到栈顶 pop() 弹出栈顶元素 peek(…

【PAT (Basic Level) 】1014 福尔摩斯的约会 (20 分)

大侦探福尔摩斯接到一张奇怪的字条: 我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的…

菜鸟物流云是如何帮助快递合作伙伴解决双11巨大业务负荷的?

物流云双11 双11前,菜鸟物流云共接入12家合作伙伴,全部参加双11大促活动,作为物流云的首次双11,尤其是经过了快递公司的大考经验,事实证明项目是靠谱的。 双11前已经整体上云的快递合作伙伴2家,韵达和天天&…

安装H3C的各种问题

HCL安装完成后,启动HCL失败;提示:“当前系统用户名中包含非ASCII字符”问题?HCL只能安装装在英文路径下,如果用户名为中文或者安装路径有中文目录,就会出现此问题,请确保系统用户名和安装路径中…

前景背景分割——ostu算法的原理及实现 OpenCV (八)

OpenCV 【八】——前景背景分割——ostu算法的原理及实现 实验结果代码实现实现原理参考资料实验结果 代码实现 #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; //计算图像灰度直方图 Mat calcgrayhist(const Mat&am…

【PAT (Basic Level) 】1015 德才论 (25 分)

宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”&#xff1a;“是故才德全尽谓之圣人&#xff0c;才德兼亡谓之愚人&#xff0c;德胜才谓之君子&#xff0c;才胜德谓之小人。凡取人之术&#xff0c;苟不得圣人&#xff0c;君子而与之&#xff0c;与其得小人&#xff0…

浏览器启动外部软件

常可以看见使用浏览器代码启动本地应用的软件.例如qq、迅雷、等等.那么他们是怎么做到的呢? 它的奥秘:Register protocol 前言我们经常看到 tencent://..thunder://这两种开头的网址&#xff0c;往往觉得很奇怪&#xff0c;很想弄懂其中的原理&#xff0c;是如何实现的&#x…

Luogu P1082 同余方程(NOIP 2012) 题解报告

题目传送门 【题目大意】 求关于x的同余方程 ax≡1(mod b)的最小整数解。 【思路分析】 由同余方程的有关知识可得&#xff0c;ax≡1(mod b)可以化为axby1&#xff0c;此方程有解当且仅当gcd(a,b)1&#xff0c;于是就可以用欧几里得算法求出一组特解x0&#xff0c;y0。 那么x0就…

MATLAB【二】————图像做减法,批量文本处理,子图显示

clear; clc; close all;name_string ["1.5ms\100\" ];length strlength(name_string); [m,n] size(length);%%----------------------------- for num1:mstr name_string(num,1); figure(color, [1, 1, 1], position, [0, 0, 1800,800]); % 为区分边界&a…

与数据有关的问题

&#xfeff;&#xfeff;◆ 背景说明 在为用户排查问题&#xff0c;解决问题时&#xff0c;有一种情况是不容易引起大家注意的&#xff0c;那就是用户的数据&#xff1b;比如&#xff0c;数据中有某些特殊字符&#xff0c;引起展现不了或展现不正常&#xff1b;现在&#xff…

【PAT (Basic Level) 】1024 科学计数法 (20 分)

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法&#xff0c;其满足正则表达式 [][1-9].[0-9]E[][0-9]&#xff0c;即数字的整数部分只有 1 位&#xff0c;小数部分至少有 1 位&#xff0c;该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数法…

jsp 实栗 jsp + jdbc 登录

jsp 实栗 jsp jdbc 实现登录 实现思路 一个表单页&#xff0c;输入用户登录和密码&#xff0c;然后信息提交到jsp页面进行验证&#xff0c;如果可以服务器跳转到登录成功页&#xff0c;失败&#xff0c;跳转到错误页 跳转的时候窗口的URL地址会发生变化 代码如下 编写登录代码…

OpenCV 【十】——Gamma校正 ——图像灰度变化

Gamma校正&#xff08;C、OpenCV实现&#xff09; 1.作用&#xff1a; Gamma校正是对输入图像灰度值进行的非线性操作&#xff0c;使输出图像灰度值与输入图像灰度值呈指数关系&#xff1a; 伽玛校正由以下幂律表达式定义&#xff1a; 2.函数原型 void calcHist( const Mat*…

Linux磁盘阵列技术详解(二)--raid 1创建

我在Linux磁盘阵列技术详解&#xff08;一&#xff09;里已经详细介绍了几种RAID磁盘阵列方式&#xff0c;原理以及创建raid 0 的详细步骤。那么这篇文档就着重讲解如何创建raid 1的技术&#xff1a;步骤如下&#xff1a;① 分区同样我们还是以一块硬盘的不同分区为例&#xff…

【PAT (Basic Level) 】1025 反转链表 (25 分)

给定一个常数 K 以及一个单链表 L&#xff0c;请编写程序将 L 中每 K 个结点反转。例如&#xff1a;给定 L 为 1→2→3→4→5→6&#xff0c;K 为 3&#xff0c;则输出应该为 3→2→1→6→5→4&#xff1b;如果 K 为 4&#xff0c;则输出应该为 4→3→2→1→5→6&#xff0c;即…

C#关于窗体的传值

关于窗体之间的传值我在《编程技巧与维护》杂志上写过总结文章&#xff0c;比较久远了。 开始的时候&#xff0c;用下面的方法传递&#xff0c;程序运行正常。 Form1 f1 this.Owner as Form1; //Form1 f1 (Form1)this.Owner;&#xff08;这样写也可以&#xff09; …

MATLAB【四】 ————批量适配图片信息与excel/txt等文档信息,批量移动拷贝图片,批量存图片中点和方框

1、批量读取图片&#xff0c;批量读取文件 2、适配文件与excel、txt等文档信息 3、获取显示图片ROI、Point、rect、更改像素值 4、批量移动拷贝图片&#xff0c;批量显示 5、保存显示图片或者图片中的点和方框。 clear; clc; close all;%% crop the im into 256*256 num 0…

mysql日志文件相关的配置【2】

1、二进制日志是什么&#xff1f; mysql 的二进制日志用于记录数据库上做的变更、 2、二进制日志什么时间写到磁盘 1、总的来说二进制日志会在释放锁之前就写入磁盘、也就是说在commit完成之前&#xff1b;client还没发送commit这个时候mysql并不把binlog写入磁盘、 别一方面my…

【PAT (Basic Level) 】1028 人口普查 (20 分)

某城镇进行人口普查&#xff0c;得到了全体居民的生日。现请你写个程序&#xff0c;找出镇上最年长和最年轻的人。这里确保每个输入的日期都是合法的&#xff0c;但不一定是合理的——假设已知镇上没有超过 200 岁的老人&#xff0c;而今天是 2014 年 9 月 6 日&#xff0c;所以…

SW6206超级华为快充5V5A,全协议OPPO闪充、自带电量计量、LED 灯/数码管显示

深圳市展嵘电子有限公司有需要的上帝可联系小陈&#xff1a;136-6225-3950 : 3412-1522-98SW6206 是一款高集成度的多协议双向快充移动电源专用多合一芯片&#xff0c;支持AABCL 口任意口快充。其集成了5A高效率开关充电&#xff0c;20W高效率同步升压输出&#xff0c;PPS/PD/Q…

bash脚本【一】——批量处理文件

Bash脚本2.0 #!/bin/bashoutput_root_dir"0723weixin" data_root_dir"D:/data/"$output_root_dir config_dir"config"# speckle_name"SPEACKLEIMAGE.bmp" # ir_name"IRIMAGE.bmp" # rgb_name"RGBIMAGE.jpg" # co…

【PAT (Basic Level) 】1030 完美数列 (25 分)

给定一个正整数数列&#xff0c;和正整数 p&#xff0c;设这个数列中的最大值是 M&#xff0c;最小值是 m&#xff0c;如果 M≤mp&#xff0c;则称这个数列是完美数列。 现在给定参数 p 和一些正整数&#xff0c;请你从中选择尽可能多的数构成一个完美数列。 【输入格式】&…

运营商劫持处理

测试URL&#xff1a;因近期发现长宽资源经常出现被劫持和转发错误的现象。解决办法如下&#xff1a;1、把转发列表写到named.conf文件里&#xff0c;更新我们的转发ip2、然后编写策略针对我们要去的域名从BGP出口出去&#xff0c;防止NAT。x.x.x.x.com&#xff0c;&#xff08;…

oracle维护数据的完整性

转自&#xff1a;https://www.cnblogs.com/roger112/p/7722376.html 介绍&#xff1a; 数据的完整性用于确保数据库数据遵从一定的商业的逻辑规则。在oracle中&#xff0c;数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现&#xff0c;在这三种方法中&…

MATLAB【五】———— matlab 调用C++生成exe文件,高斯核函数

两种方式调用C生成的exe文件&#xff0c; 语法&#xff1a; status system(command) [status,cmdout] system(command) [status,cmdout] system(command,-echo) 说明 status system(command) 调用操作系统执行指定的命令。操作会等待命令执行完毕&#xff0c;然后再将命令…

REACT day 1

https://facebook.github.io/react/ A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES Declarative views make your code more predictable and easier to debug. React是Facebook在2013年发布的一个前端框架&#xff0c;而如今的React俨然已经演变成一个前端生态&#xff…

win10+Chrome浏览器截长图方法

本方法亲测可行&#xff0c;操作系统为win10&#xff0c;其他操作系统没有试过。 部分内容基于https://blog.csdn.net/ianly123/article/details/80565614并进行修正。 打开 Chrome 浏览器&#xff0c;进入需要截图的网站页面。打开开发者工具&#xff1a;在页面任何地方点击…

如何打造一流的视觉AI技术

本次分享主要分以下几个部分&#xff1a;首先简要介绍一下计算机视觉技术的相关背景&#xff0c;然后结合格灵深瞳的实践&#xff0c;从算法研发、训练平台、智能数据处理、异构计算等几个方面着重介绍如何打造一流的视觉AI技术&#xff0c;最后介绍格灵深瞳在相关技术落地方面…

MATLAB【六】 ———— matlab 随机散斑模拟

%% %input for image size(NX,NY) <散斑图大小&#xff08;像素&#xff09;> NX 1280; NY 800; %input for numble of speckles(S)<散斑数量> S 9226; %输入的散斑大小 a 4; %input for peak intensity of each speckle(I0)<散斑峰值强度> I0 1; %input …

【Python】zip函数

zip()函数用于将可迭代对象作为参数&#xff0c;将对象中对应的元素打包成一个个元组&#xff0c;然后返回这些由元组组成的列表。 如果各个迭代器的元素不一致&#xff0c;则返回列表长度与最短的对象相同。 利用*号操作符&#xff0c;可将元组解压为列表。 >>> a …