本发明涉及一种版本控管系统及其方法,特别是基于区块链的智能合约版本控管系统及其方法。
背景技术:
近年来,由于区块链具有难以窜改、交易透明等特性,各种基于区块链的应用便如雨后春笋般出现。其中,区块链应用于智能合约的相关技术成为备受关注的议题之一。
当区块链应用于智能合约时,实际上就是将智能合约的程序代码包含在交易的数据栏位中并发送到区块链网络,通过区块链网络中的节点将包含智能合约的程序代码制作成区块并广播该区块,以供其他节点进行验证,通过验证的区块即可发布在区块链网络。
举例而言,在ethereum所发布的协议版本中,只要该交易没有设定收方地址(recipient),区块链网络即视此交易为发布智能合约交易,经过验证后产生对应的合约地址(contractaddress),该合约地址即智能合约的参照地址,使用节点的应用程序即可通过该合约地址取得该智能合约实体,并执行该智能合约。
然而,区块链应用于智能合约时,因为区块链具有难以窜改的特性,使得已发布的智能合约没有机会进行更改。因此,当智能合约可能存在错误需进行修复或智能合约需要新增功能,需重新发布修复或新增功能的智能合约。但是,一旦重新发布修复或新增功能的智能合约后,使用节点的应用程序也需相应进行更新,以取得最新的智能合约的合约地址。
综上所述,可知现有技术中长期以来一直存在当使用节点的应用程序欲取得更新版本的智能合约时,应用程序因智能合约的版本更新而被强迫更新的问题,因此实有必要提出改进的技术手段,来解决此问题。
技术实现要素:
本发明说明一种基于区块链的智能合约版本控管系统及其方法。
首先,本发明说明一种基于区块链的智能合约版本控管系统,此系统包含:版本控管节点、多个验证节点及使用节点。其中,版本控管节点包含控管模块,用以发布不同版本的智能合约,并依据不同版本的智能合约分别产生区块链交易,其中,控管模块将不同版本的智能合约通过控管合约注册对应的合约地址与版本号,每一版本的智能合约参照先前版本的智能合约。多个验证节点用以接收该些区块链交易,该些验证节点其中之一的验证节点将该些区块链交易依次写入区块后提供其他验证节点进行验证,验证区块的验证节点将通过验证的区块发布在区块链网络中。使用节点包含应用程序,用以通过控管地址取得控管合约的实体,并通过控管合约的实体取得最新注册的版本号与合约地址,再通过取得的最新注册的版本号与合约地址取得最新版本的智能合约的实体。
另外,本发明说明一种基于区块链的智能合约版本控管方法,其步骤包括:版本控管节点发布不同版本的智能合约,并依据不同版本的智能合约分别产生区块链交易;版本控管节点将区块链交易提供区块链网络上的多个验证节点,该些验证节点其中之一的验证节点将区块链交易依次写入区块,并将区块提供其他验证节点进行验证;验证区块的验证节点将通过验证的区块发布在区块链网络中;版本控管节点的控制模块将不同版本的智能合约通过控管合约注册对应的合约地址与版本号,其中,每一版本的智能合约参照先前版本的智能合约;使用节点的应用程序通过控管地址取得控管合约的实体;应用程序通过控管合约的实体取得最新注册的版本号与合约地址;以及应用程序通过取得的最新注册的版本号与合约地址取得最新版本的智能合约的实体。
本发明所说明的系统与方法如上,与现有技术的差异在于本发明是借由版本控管节点的控管模块将不同版本的智能合约通过控管合约注册对应的合约地址与版本号,使用节点的应用程序通过控管地址取得控管合约的实体,并通过控管合约的实体取得最新注册的版本号与合约地址,让应用程序依据取得的最新注册的版本号与合约地址取得最新版本的该智能合约的实体。
通过上述的技术手段,本发明可以达成应用程序欲取得最新版本的智能合约的实体时,不需因智能合约的版本更新而被强迫更新的技术功效。
附图说明
图1为本发明基于区块链的智能合约版本控管系统的方框图。
图2为本发明基于区块链的智能合约版本控管方法的方法流程图。
图3a为本发明的第一版本智能合约的实施例示意图。
图3b为本发明的第一版智能合约所参照的储存余额指令的实施例示意图。
图3c为本发明的第二版本智能合约的实施例示意图。
图3d为本发明的控管合约的实施例示意图。
【附图标记列表】
10区块链网络
50控管模块
100基于区块链的智能合约版本控管系统
110验证节点
120版本控管节点
130使用节点
132应用程序
具体实施方式
以下将配合图式及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
在说明本发明所说明的基于区块链的智能合约版本控管系统及其方法之前,先对本发明所自行定义的名词作说明,本发明所述的版本控管节点、验证节点及使用节点通过区块链网络相互连结,版本控管节点、验证节点及使用节点具有相同的元件与结构(即版本控管节点、验证节点及使用节点皆可包含控管模块与应用程序),在一实施例中,不同节点的差异在于版本控管节点拥有一组金钥对,版本控管节点借由该组金钥对针对新版本的智能合约进行签章,而后发布已签章的新版本的智能合约﹔验证节点用以验证区块链网络中其他节点所广播的区块内容﹔使用节点即为通过控管合约取得版本控管节点所发布的新版本智能合约的实体的节点,当使用节点的应用程序通过控管合约的实体取得已签章的新版本的智能合约时,会先通过该组金钥对的公钥验证已签章的新版本智能合约,若使用节点的应用程序判断已签章的新版本智能合约利用该组金钥对进行签章时,则代表已签章的新版本智能合约由版本控管节点所发布,可执行该已签章的新版本智能合约﹔若使用节点的应用程序判断已签章的新版本智能合约不是利用该组金钥对进行签证时,则代表已签章的新版本智能合约不是由版本控管节点所发布,不可执行该已签章的新版本智能合约。在另一实施例中,不同节点的差异在于版本控管节点发布新版本的智能合约﹔验证节点用以验证区块链网络中其他节点所广播的区块内容﹔使用节点即为通过控管合约取得版本控管节点所发布的新版本智能合约的实体的节点,在本实施例中使用节点的应用程序信任控管合约的实体所找到的新版本智能合约的实体,所以控管合约的实体所传回来的各种内容皆为可信内容,不需进行验证即可执行新版本智能合约。因此,本发明所述的版本控管节点、验证节点及使用节点因其执行不同的程序以及是否拥有所述金钥对而扮演不同的角色。
此外,本发明所述基于区块链的智能合约版本控管系统所包含的版本控管节点、验证节点及使用节点可以利用各种方式来实现,包括软件、硬件、固件或其任意组合,本发明的范围在此方面不受限制。在实施中提出的技术使用软件或固件可以被储存在机器可读储存介质上,例如:只读存储器(rom)、随机存取存储器(ram)、磁盘储存介质、光储存介质、闪速存储器装置等等,并且可以由一个或多个通用或专用的可程序化微处理器执行。
以下配合图式对本发明基于区块链的智能合约版本控管系统及其方法做进一步说明。需注意的是,以下实施例的说明以各节点所扮演的角色之间相互运行的描述,该些节点并非限缩仅能扮演验证节点、版本控管节点或使用节点,可依据每次执行的程序或是否拥有所述金钥对而为不同的节点。
请先参阅图1,图1为本发明基于区块链的智能合约版本控管系统的系统方框图,基于区块链的智能合约版本控管系统的系统100包含:多个验证节点110、版本控管节点120及使用节点130。
所述节点110的数量为n,n为大于2的正整数,每一节点110通过区块链网络10相互连线。所述区块链网络10可为网际网络、私有网络、虚拟私有网络等等。
版本控管节点120包含控管模块50,用以发布不同版本的智能合约,并依据不同版本的智能合约分别产生区块链交易,而后将该些区块链交易提供区块链网络10上的多个验证节点110。其中,版本控管节点120如何发布智能合约以及如何产生区块链交易如上所述,于此不再多加赘述。
该些验证节点110用以接收该些区块链交易,该些验证节点110其中之一的验证节点110将该些区块链交易依次写入区块后提供其他验证节点110进行验证,验证区块的验证节点110将通过验证的区块发布在区块链网络10中。更详细地说,每一验证节点110可将该些区块链交易依次写入区块,再通过区块链网络10广播包含该些区块链交易的区块,以让其他验证节点110进行验证。
为了避免智能合约被窜改,进而提高整体可靠性,多个验证节点110会持续收取区块链网络10上的区块链交易,并将该些区块链交易依次写入区块,再通过区块链网络10提供给非广播所述区块的其他验证节点110进行验证,当某一区块之后的链结的越长时,该区块则越难被窜改。在实际实施上,上述智能合约的发布技术可使用现有技术来实现,例如:ethereum所发布的协议版本。
控管模块50将不同版本的智能合约通过控管合约注册对应的合约地址与版本号,每一版本的智能合约参照先前版本的智能合约。更详细地说,每当版本控管节点120发布新版本的智能合约,且依据新版本的智能合约所产生的区块链交易通过验证节点110的验证后,控管模块50将新版本的智能合约通过控管合约注册对应的合约地址与版本号,控管合约依据注册的时间顺序依次产生对应合约地址的版本号。其中,版本号用以定义智能合约的版本,例如:第一个进行注册的智能合约的版本为第1版,第二个进行注册的智能合约的版本为第2版。其中,控管合约记录不同版本智能合约的合约地址与版本号。
此外,每一版本的智能合约参照先前版本的智能合约。更详细地说,每一版本的智能合约皆包含控管地址,当每一版本的智能合约需参照先前版本的智能合约时,每一版本的智能合约会通过控管地址取得控管合约的实体,并通过控管合约的实体取得参照版本的智能合约的版本号与合约地址,使得每一版本的智能合约的实体通过取得的参照版本的智能合约的版本号与合约地址取得参照版本的智能合约的实体。其中,控管地址为控管合约的参照地址。因此,不同于现有技术中新版本的智能合约需包含其所参照的先前版本的智能合约的合约地址,而造成当智能合约的版本数成长过大时,需要大量储存空间以储存更新的智能合约的问题,本发明的每一版本的智能合约可通过控管合约参照先前版本的智能合约,解决上述现有技术的问题,同时使得新版本的智能合约因去除过多的变数而增加可读性。
使用节点130包含应用程序132,用以通过控管地址取得控管合约的实体,并通过控管合约的实体取得最新注册的版本号与合约地址,再通过取得的最新注册的版本号与合约地址取得最新版本的智能合约的实体。更详细地说,具有应用程序132的使用节点130欲取得最新版本的智能合约的实体时,由于具有应用程序132的使用节点130没有最新版本智能合约的合约地址,而无法取得最新版本的智能合约的实体,因此,具有应用程序132的使用节点130可通过区块链网络10以控管地址取得控管合约的实体,并通过控管合约的实体取得最新注册的版本号与合约地址,让使用节点130的应用程序132依据取得的最新注册的版本号与合约地址取得最新版本的智能合约的实体。由于控管地址固定不变,因此,当具有应用程序132的使用节点130欲取得最新版本的智能合约的实体时,可通过控管地址以及控管合约的实体取得最新版本的智能合约的实体,不需因智能合约的版本更新(即版本数持续往上累加)而被强迫更新。
此外,在使用节点130的应用程序132取得最新版本的智能合约的实体之后,欲执行最新版本的智能合约的实体时,由于最新版本的智能合约参照先前版本的智能合约,因此,最新版本的智能合约的实体通过控管地址取得控管合约的实体,并通过控管合约的实体取得指定版本的智能合约的合约地址与版本号,使得最新版本的智能合约的实体通过取得的指定版本的智能合约的版本号与合约地址取得指定版本的智能合约的实体,以执行最新版本的智能合约的实体。其中,指定版本的智能合约为最新版本的智能合约所参照的智能合约。
在一实施例中,版本控管节点120还可拥有一组金钥对,版本控管节点120借由该组金钥对针对新版本的智能合约进行签章,而后发布已签章的新版本的智能合约﹔验证节点110用以验证区块链网络10中其他节点所广播的区块内容﹔使用节点130即为通过控管合约取得版本控管节点120所发布的新版本智能合约的实体的节点,当使用节点130的应用程序132通过控管合约的实体取得已签章的新版本的智能合约时,会先通过该组金钥对的公钥验证已签章的新版本智能合约,若使用节点130的应用程序132判断已签章的新版本智能合约利用该组金钥对进行签章时,则代表已签章的新版本智能合约由版本控管节点120所发布,可执行该已签章的新版本智能合约﹔若使用节点130的应用程序132判断已签章的新版本智能合约不是利用该组金钥对进行签证时,则代表已签章的新版本智能合约不是由版本控管节点120所发布,不可执行该已签章的新版本智能合约。
接着,请参阅图2,图2为本发明基于区块链的智能合约版本控管方法的方法流程图,其步骤包括:版本控管节点发布不同版本的智能合约,并依据不同版本的智能合约分别产生区块链交易,其中,每一版本的智能合约参照先前版本的智能合约(步骤210);版本控管节点将区块链交易提供区块链网络上的多个验证节点,该些验证节点其中之一的验证节点将区块链交易依次写入区块,并将区块提供其他验证节点进行验证(步骤220);验证区块的验证节点将通过验证的区块发布在区块链网络中(步骤230);版本控管节点的控制模块将不同版本的智能合约通过控管合约注册对应的合约地址与版本号(步骤240);使用节点的应用程序通过控管地址取得控管合约的实体(步骤250);应用程序通过控管合约的实体取得最新注册的版本号与合约地址(步骤260);以及应用程序通过取得的最新注册的版本号与合约地址取得最新版本的智能合约的实体(步骤270)。通过上述步骤,即可通过版本控管节点的控管模块将不同版本的智能合约通过控管合约注册对应的合约地址与版本号,使用节点的应用程序通过控管地址取得控管合约的实体,并通过控管合约的实体取得最新注册的版本号与合约地址,让应用程序依据取得的最新注册的版本号与合约地址取得最新版本的该智能合约的实体。
此外,基于区块链的智能合约版本控管方法的步骤也可包含:最新版本的智能合约的实体通过控管地址取得控管合约的实体﹔最新版本的智能合约的实体通过控管合约的实体取得指定版本的智能合约的版本号与合约地址﹔以及最新版本的智能合约的实体通过取得的指定版本的智能合约的版本号与合约地址取得指定版本的智能合约的实体,其中,最新版本的该智能合约参照指定版本的智能合约。通过上述步骤,最新版本的智能合约的实体即可通过控管合约的实体取得最新版本的智能合约的实体所参照的指定版本的智能合约的实体,以供应用程序执行最新版本的智能合约的实体。
另外,基于区块链的智能合约版本控管方法还可包含:控管合约记录具有不同版本智能合约的该些合约地址与该些版本号。再者,基于区块链的智能合约版本控管方法可利用ethereum所发布的协议版本进行实现。
在一实施例中,基于区块链的智能合约版本控管方法的步骤210还包含:版本控管节点借由其具有的一组金钥对针对新版本的智能合约进行签章,而后发布已签章的新版本的智能合约。在本实施例中,基于区块链的智能合约版本控管方法的步骤还可包含:应用程序通过控管合约的实体取得最新版本的智能合约的实体后,通过版本控管节点所具有的该组金钥对的公钥验证已签章的新版本的智能合约﹔若应用程序判断最新版本的智能合约利用该组金钥对进行签章时,可执行最新版本的智能合约的实体﹔若应用程序判断已签章的新版本的智能合约不是利用该组金钥对进行签章时,不可执行最新版本的智能合约的实体。
以下配合图3a至图3d以solidity智能合约程序实施的方式进行如下说明,其中,图3a为本发明的第一版本智能合约的一实施例示意图,图3b为本发明的第一版本智能合约所参照的储存余额指令的一实施例示意图,图3c为本发明的第二版本智能合约的一实施例示意图,图3d为本发明的控管合约的一实施例示意图。
在本实施例中,samplecoin为一假想的数位货币,并以ethereum所发布的协议版本实现本实施例。
从图3a与图3b可知,在第一版本智能合约中,合约的拥有者可以发行货币,而货币拥有者可以发送货币给任何人,其中,第一版本智能合约的实体所参照的储存余额指令用以储存samplecoin的余额数据。
从图3c可知,第二版本智能合约除了包含第一版本智能合约的实体之外,还增加了第一版本智能合约没有的功能,可通过函数send()判断当下区块链的区块数,在产生第一百万个区块以前,货币拥有者可以发送货币给任何人,不需收取手续费,但在产生第一百万个区块之后,每次发送货币必须收取10个samplecoin当作手续费。
从图3d可知,每次发布新版本的智能合约,需向控管合约注册最新版本智能合约的合约地址,并通过函数register()将最新版本的版本号储存在latestversion,因此,使用节点的应用程序可通过函数getlatestversionaddress()即可找到最新版本的智能合约的合约地址。举例而言,假设新版本的智能合约的版本号为“2”,合约地址为“0x002”,当使用节点的应用程序欲取得该新版本的智能合约的实体时,可通过呼叫控管程序的versionregistrar.setaddress(“2”,0x002)取得该新版本的智能合约的实体。
综上所述,可知本发明与现有技术之间的差异在于通过版本控管节点的控管模块将不同版本的智能合约通过控管合约注册对应的合约地址与版本号,使用节点的应用程序通过控管地址取得控管合约的实体,并通过控管合约的实体取得最新注册的版本号与合约地址,让应用程序依据取得的最新注册的版本号与合约地址取得最新版本的该智能合约的实体,借由此技术手段可以解决现有技术所存在的问题,进而达成使用节点的应用程序欲取得最新版本的智能合约的实体时,不需因智能合约的版本更新而被强迫更新的技术功效。
虽然本发明以前述的实施例说明如上,然其并非用以限定本发明,任何本发明所属技术领域中的技术人员,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,因此本发明的专利保护范围须视本说明书所附的权利要求书所界定的范围为准。