【论文研读】-A Parallel Smart Contract Model

这篇具有很好参考价值的文章主要介绍了【论文研读】-A Parallel Smart Contract Model。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

随着区块链技术的飞速发展,区块链成为执行智能合约的良好平台。然而,由于智能合约在区块链上的交易处理性能仍然很低。在某些情况下它不能满足实时要求。本文提出了一种基于区块链的并行智能合约模型,该模型在交易处理方面具有更好的性能。所提出方法的挑战是并行模式的实现和所提出模型的同步问题的解决方案。本文使用多线程技术来实现所提出的模型,其中事务是并行执行的。然后我们提出了一种事务拆分算法来解决同步问题。最后,实验分析证明,这种并行模型正是在事务处理性能上取得了显着的进步。

贡献

本文提出了一种新的智能合约模型。它使用多线程技术 [5] 并行执行智能合约。使用这种新模型处理交易可以降低平均时间成本,并使智能合约在区块链上获得更好的性能。

主要贡献:

  • 我们分析了当前典型的智能合约模型并总结了它的缺点。
  • 我们提出了一种并行智能合约模型,在交易处理上具有更好的性能。
  • 我们提出了一种交易拆分算法来解决并行智能合约模型中的同步问题。
  • 我们测试了我们提出的算法和并行模型的性能。

(个人认为:主要介绍了一种将有共享资源的交易划分为不同的交易集的算法)

合约执行流程和改进后的流程

a parallel smart contract model,论文研读,区块链,文档资料,区块链

未改进的智能合约流程

图中分为五步但是总结下来流程如下:

  • 将要处理的交易会调用其相应的合约。
  • 通过分析交易内容,EVM 得到来自交易和状态数据库的相应合约代码和合约输入。
  • 合约代码在 EVM 中执行,状态变量的更改将被写回状态数据库。
  • 当一个区块中的所有交易都已经被执行时,状态数据库的当前状态将被记录在区块链中作为证明。

a parallel smart contract model,论文研读,区块链,文档资料,区块链

改进后智能合约流程

执行过程可以概括为:

  • Step1:当区块链系统从交易池中获得足够多的有效交易时,就会开始处理这些交易。
  • Step2:事务拆分组件对事务进行分析,得到共享变量的信息。然后,该组件将事务分组到不同的集合中,这些集合彼此之间没有相同的共享变量。最后,这些事务集将被发送到多线程处理组件。
  • Step3:多线程处理组件将这些事务处理工作分配给各个线程。
  • Step4:线程开始运行并从状态数据库中获取必要的初始数据,例如合约代码。然后,调用的合约就可以执行了。
  • Step5:合约代码将被执行,然后代码将完成其对应的智能合约的业务逻辑。
  • Step6:智能合约执行会改变一些相关的状态变量,这些改变最终会被写回状态数据库。
  • Step7:当所有智能合约完成后,区块链系统会进行状态数据库的认证(即在以太坊中,状态数据库的认证是MPT的根),然后将所有处理过的交易和认证记录到区块链中.

总结下来:改进后和改进前的区别主要就是两点:一个是引入将有共享资源交易划分为同一个交易集合的交易分割算法,这里作者将有共享资源的交易划分为三类(没有共享资源的交易、有直接共享资源的交易、有间接(两个交易之间没有直接共享资源,需要第三个交易插入才行)共享资源的交易),最后将直接和间接共享资源的交易划分为有关系的交易,划分为一个交易集里,主要介绍了交易分割的算法和算法实现后实验结果对比,成功将之前串行化进行智能合约转化为并行的,减少智能合约执行时间;二个是进行多线程组,将不用的交易集放到不同的线程组里面进行交易(本文并没有进行这个方面的详细阐述)。

交易分割算法的阐述

a parallel smart contract model,论文研读,区块链,文档资料,区块链
算法一:用来判断两个交易是否相关,通过输入交易集来获得相关交易集

a parallel smart contract model,论文研读,区块链,文档资料,区块链
a parallel smart contract model,论文研读,区块链,文档资料,区块链

算法二:在我们得到每个事务的相关集合后,我们可以很容易地将所有事务之间的关系转换为无向图。然后我们设计了一种基于 BFS (广度优先搜索算法)的拆分算法,将相关事务拆分为同一个子集。表 2 显示了伪代码。通过输入交易集和相关集,我们最终可以得到不相关的交易集。(这个我在进行算法实现的时候出现算法本身出现的问题,这个位置的伪代码逻辑上有问题,具体详细的过程应该是在算法一的基础上进行交易的合并,比如交易1和交易2有共享资源,交易2和交易3有共享资源,我们通过他们之间的关系,从而建立起一个集合里面包括交易1、2、3三个交易,这才是算法2应该完成的事情)

发现上述代码无法实现之后,我尝试自己进行重新更改伪代码:

* 伪代码如下:
 * create set N
 * while T is not empty
 *      get a transaction tx from T
 *      create a set Q
 *      txQ
 *      presize=0
 *      while Q.size()>presize
 *          presize=Q.size()
 *          Q→txi
 *          R.iterator()
 *              while(R.hasNext())
 *              if(R.next().contain(txi)){
 *                  Q.add(txi);//txi不同于tx
 *              }
 *      QN
 * return N
 */

最后进行代码实现:

public class testAsplitTx {
    /*判断两个交易是否有共享资源*/
    public boolean isRelated(int[] T1,int [] T2){
        int n1=T1.length;
        int n2=T2.length;
        for (int i = 0; i < n1; i++) {
            for (int j = 0; j <n2; j++) {
                if(T1[i]==T2[j]){
                    return true;
                }
            }
        }
        return false;
    }
    /*创建有关系的交易集*/
    public Set<Set<int []>> CreateRelatedTransactionSets(Set<int []> T){
        Set<Set<int []>> R =new HashSet<>();
        Iterator<int []> it=T.iterator();

        while (it.hasNext()){
            Set<int[]> S=new HashSet<>();
            int [] Txi=it.next();
            S.add(Txi);
            Iterator<int []> it1=T.iterator();
            while(it1.hasNext()){
                int[] Txj = it1.next();
                if (isRelated(Txi,Txj)){
                    S.add(Txj);
                }
            }
        R.add(S);
        }
        return R;
    }
    public Set<Set<int []>> splittingTransactions(Set<int []> T,Set<Set<int []>> R){
        /*由于CreateRelatedTransactionSets创建了交易之间彼此的关系,相当于创建了交易上面的FROM到TO的关系,这里我们就是去实现他们之间交易依赖
        关系图,把所有有依赖关系的交易放置到一个集合里面。
        实现方法:利用集合不会再添加的属性,来不断将交易去问询所有的关系依赖图中的交易,直到没有交易增加*/
        Set<Set<int []>> N= new HashSet<>();
        Iterator<int[]> iterator = T.iterator();
        while(iterator.hasNext()){
            int [] Txi=iterator.next();
            Set<int []> Q=new HashSet<>();
            Q.add(Txi);
            int presize=0;
            while (Q.size()>presize){
                presize=Q.size();
                for (int[] temp_Tx:Q){
                    for (Set<int []> next:R){
                        if (next.contains((temp_Tx))){
                            for (int [] temp_Array:next){
                                Q.add(temp_Array);
                            }
                        }
                    }
                }             
            }
            N.add(Q);
        }
        return N;
    }
    public static void main(String[] args) {
    //其中每个数组里面的整型数代表交易里面的资源,有相同的数则代表会有交易上面的依赖冲突
        int [] Tx1={1,2,3};
        int [] Tx2={1,6};
        int [] Tx3={6};
        int [] Tx4={4};
        int [] Tx5={4,7};
        int [] Tx6={5};
        Set<int []> T =new HashSet<>();
        T.add(Tx1);
        T.add(Tx2);
        T.add(Tx3);
        T.add(Tx4);
        T.add(Tx5);
        T.add(Tx6);

        testAsplitTx taspTx=new testAsplitTx();
        Set<Set<int[]>> sets = taspTx.CreateRelatedTransactionSets(T);
        Set<Set<int[]>> sets1 = taspTx.splittingTransactions(T, sets);
        Iterator<Set<int[]>> iterator = sets1.iterator();
        while(iterator.hasNext()){
            Iterator<int[]> iterator1 = iterator.next().iterator();
            while (iterator1.hasNext()){
                int[] next = iterator1.next();
                for (int i = 0; i < next.length ; i++) {
                    System.out.print(next[i]+" ");
                }
            }
            System.out.println();
        }
    }

}

最后输出的结果:

4 4 7 
5 
1 2 3 6 1 6 

结果说明:4代表Tx4,4 7代表Tx5,都是对应上述的main函数里面的各个交易。

最后分析算法复杂度,得出两个结论:

  • 事务拆分算法的时间成本与属于这些事务的共享变量的数量呈正线性相关。
  • 交易拆分算法的时间成本与每个区块的交易数量呈正线性相关。

实验结果

主要比较并行化智能合约相较于串行化的时间上优化:
a parallel smart contract model,论文研读,区块链,文档资料,区块链

并行模型相较于串行模型时间上的对比

结果阐明: 根据这两种模式的比较。结果表明,我们提出的并行智能合约模型确实比串行智能合约模型具有更好的性能。此外,在每个区块包含 3500 笔交易的情况下,它至少可以节省 23.8% 的时间成本,在每个区块包含 1000 笔交易的情况下,最多可以节省 41.9% 的时间成本。因此,我们最终可以证明,所提出的并行模型比当前的串行智能合约模型具有显着的性能提升。

这篇文章的总结

主要介绍智能合约在静态分下的智能合约并行化的执行的文章,文章行文比较简单,智能合约流程介绍比较清楚,主要改进在对交易的划分和多线程组执行上,但是介绍的交易划分方面主要体现在算法上,对于交易中的共享资源如何进行判断和划分并没有明确的指明,这篇文章比较大的漏洞,还有在多线程上进行不用交易集上的时间长短也会在一定程度上影响智能合约执行i的时间,这个也是没有去考虑的问题,以及提出的交易度的定义和间接有关系的交易图细节上面也存在问题。

建议想要详细阅读这篇文章的读者重点阅读交易分割算法 即可。文章来源地址https://www.toymoban.com/news/detail-781967.html

到了这里,关于【论文研读】-A Parallel Smart Contract Model的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【论文阅读笔记】PraNet: Parallel Reverse Attention Network for Polyp Segmentation

    PraNet: Parallel Reverse Attention Network for Polyp Segmentation PraNet:用于息肉分割的并行反向注意力网络 2020年发表在MICCAI Paper Code 结肠镜检查是检测结直肠息肉的有效技术,结直肠息肉与结直肠癌高度相关。在临床实践中,从结肠镜图像中分割息肉是非常重要的,因为它为诊断和手术

    2024年01月20日
    浏览(57)
  • 【论文阅读笔记】RAAGR2-Net: A brain tumor segmentation network using parallel processing of multiple spatial

    Rehman M U, Ryu J, Nizami I F, et al. RAAGR2-Net: A brain tumor segmentation network using parallel processing of multiple spatial frames[J]. Computers in Biology and Medicine, 2023, 152: 106426.【开放源码】 【论文核心思想概述】 本文介绍了一种名为RAAGR2-Net的新型脑肿瘤分割网络,这是一个基于编码器-解码器架构,用

    2024年02月03日
    浏览(41)
  • 零知识证明论文阅读---Blockchain-Assisted Transparent Cross-Domain Authorization and Authentication for Smart

    系统由五类实体组成: Identity committee members (ICMs) , Identity issuers (IIs) , Identity holders (IHs) , Identity verifiers (IVs) , Identity auditor (IA) 。详细的介绍可以阅读这篇论文 Blockchain-Assisted Transparent Cross-Domain Authorization and Authentication for Smart City Service Entity Registration Identity Issuers Registration 在

    2024年01月16日
    浏览(44)
  • parallel dml enable

    A. Export/import method This method involves exporting the non partitioned table, creating a partitioned table, and then importing data into the new partitioned table. 1) Export your table: $ exp user_name/pwd tables=TEST_TABLE1 file=exp.dmp 2) Drop the table: SQL drop table TEST_TABLE1; 3) Recreate the table with partitions: SQL create table TEST_TABLE1 (qt

    2024年02月10日
    浏览(26)
  • 17、并行网关(parallel gateway)

    并行网关(parallel gateway)是指可以同时执行所有输出路径,并且需要所有输入路径执行完毕汇总到网关后流程才往下流转的元素。 并行网关上的序列流即使有条件判断也会忽略。 并行网关分两部分: 叉子(fork): 用于并行任务开始 汇总(join):用于并行任务汇总。 假设社交

    2023年04月24日
    浏览(32)
  • C# 任务并行类库Parallel调用示例

    Task Parallel Library 是微软.NET框架基础类库(BCL)中的一个,主要目的是为了简化并行编程,可以实现在不同的处理器上并行处理不同任务,以提升运行效率。Parallel常用的方法有For/ForEach/Invoke三个静态方法。

    2024年02月04日
    浏览(33)
  • Java Stream对象并行处理方法parallel()

            Stream.parallel() 方法是 Java 8 中 Stream API 提供的一种并行处理方式。在处理大量数据或者耗时操作时,使用 Stream.parallel() 方法可以充分利用多核 CPU 的优势,提高程序的性能。本文将从以下几个方面对 Stream.parallel() 进行详解。 什么是 Stream.parallel() 方法         

    2024年02月16日
    浏览(64)
  • 用上Parallel让你的.NET应用效率飙升

    简介 .NET Framework 和 .NET Core 提供了强大的并行编程支持,其中一个核心工具就是Parallel类。Parallel类是.NET Framework4.0推出的新特性。Parallel类使得在多核系统上执行并行操作变得更加简单和高效。通过并行编程,可以充分利用现代计算机系统的硬件资源,提高应用程序的性能。

    2024年02月05日
    浏览(48)
  • C# Task Parallel Library (TPL) 访问线程池

    //在C#中,可以使用Task Parallel Library (TPL)来访问线程池。 //TPL是一个用于并行编程的框架,它提供了一种简单的方式来创建并行任务, //并 自动利用线程池 来执行这些任务。 //下面是一个使用TPL访问线程池的示例: //csharp using System; using System.Threading.Tasks; class Program {     st

    2024年02月08日
    浏览(76)
  • 【Linux】使用Bash和GNU Parallel并行解压缩文件

    在本教程中,我们将学习如何使用Bash脚本和GNU Parallel实现高效并行解压缩多个文件。这种方法在处理大量文件时可以显著加快提取过程。 先决条件 确保系统上已安装以下内容: Bash GNU Parallel 你可以使用以下命令在不同Linux系统上安装它们: 在Ubuntu上安装 在CentOS上安装 想象

    2024年02月04日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包