這裡將詳細地對示例性實施例進行說明,其示例表示在圖式中。下面的描述涉及圖式時,除非另有表示,不同圖式中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本說明書一個或多個實施例相一致的所有實施方式。相反地,它們僅是與如所附申請專利範圍中所詳述的、本說明書一個或多個實施例的一些態樣相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本說明書顯示和描述的順序來執行相應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本說明書所描述的更多或更少。此外,本說明書中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本說明書中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
區塊鏈一般被劃分為三種類型:公有鏈(Public Blockchain),私有鏈(Private Blockchain)和聯盟鏈(Consortium Blockchain)。此外,還可以有上述多種類型的結合,比如私有鏈+聯盟鏈、聯盟鏈+公有鏈等。
其中,去中心化程度最高的是公有鏈。公有鏈以比特幣、乙太坊為代表,加入公有鏈的參與者(也可稱為區塊鏈中的節點)可以讀取鏈上的資料記錄、參與交易、以及競爭新區塊的記帳權等。而且,各節點可自由加入或者退出網路,並進行相關操作。
私有鏈則相反,該網路的寫入權限由某個組織或者機構控制,資料讀取權限受組織規定。簡單來說,私有鏈可以為一個弱中心化系統,其對節點具有嚴格限制且節點數量較少。這種類型的區塊鏈更適合於特定機構內部使用。
聯盟鏈則是介於公有鏈以及私有鏈之間的區塊鏈,可實現“部分去中心化”。聯盟鏈中各個節點通常有與之相對應的實體機構或者組織;節點透過授權加入網路並組成利益相關聯盟,共同維護區塊鏈運行。
基於區塊鏈的基本特性,區塊鏈通常是由若干個區塊構成。在這些區塊中分別記錄有與該區塊的創建時刻對應的時間戳記,所有的區塊嚴格按照區塊中記錄的時間戳記,構成一條在時間上有序的資料鏈條。
對於物理世界產生的真實資料,可以將其構建成區塊鏈所支援的標準的交易(transaction)格式,然後發布至區塊鏈,由區塊鏈中的節點設備對收到的交易進行共識處理,並在達成共識後,由區塊鏈中作為記帳節點的節點設備,將這筆交易封包化進區塊,在區塊鏈中進行持久化存證。
其中,區塊鏈中支援的共識演算法可以包括:
第一類共識演算法,即節點設備需要爭奪每一輪的記帳週期的記帳權的共識演算法;例如,工作量證明(Proof of Work, POW)、股權證明(Proof of Stake,POS)、委任權益證明(Delegated Proof of Stake,DPOS)等共識演算法;
第二類共識演算法,即預先為每一輪記帳週期選舉記帳節點(不需要爭奪記帳權)的共識演算法;例如,實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)等共識演算法。
在採用第一類共識演算法的區塊鏈網路中,爭奪記帳權的節點設備,都可以在接收到交易後執行該筆交易。爭奪記帳權的節點設備中可能有一個節點設備在本輪爭奪記帳權的過程中勝出,成為記帳節點。記帳節點可以將接收到的交易與其它交易一起封包化以產生最新區塊,並將產生的最新區塊或者該最新區塊的區塊頭發送至其它節點設備進行共識。
在採用第二類共識演算法的區塊鏈網路中,具有記帳權的節點設備在本輪記帳前已經商定好。因此,節點設備在接收到交易後,如果自身不是本輪的記帳節點,則可以將該交易發送至記帳節點。對於本輪的記帳節點,在將該交易與其它交易一起封包化以產生最新區塊的過程中或者之前,可以執行該交易。記帳節點在產生最新區塊後,可以將該最新區塊或者該最新區塊的區塊頭發送至其它節點設備進行共識。
如上所述,無論區塊鏈採用以上顯示的哪種共識演算法,本輪的記帳節點都可以將接收到的交易封包化以產生最新區塊,並將產生的最新區塊或者該最新區塊的區塊頭發送至其它節點設備進行共識驗證。如果其它節點設備接收到最新區塊或者該最新區塊的區塊頭後,經驗證沒有問題,可以將該最新區塊追加到原有的區塊鏈末尾,從而完成區塊鏈的記帳過程。其它節點驗證記帳節點發來的新的區塊或區塊頭的過程中,也可以執行該區塊中的包含的交易。
在區塊鏈領域,有一個重要的概念就是帳戶(Account);以乙太坊為例,乙太坊通常將帳戶劃分為外部帳戶和合約帳戶兩類;外部帳戶就是由用戶直接控制的帳戶,也稱之為用戶帳戶;而合約帳戶則是由用戶透過外部帳戶創建的,包含合約代碼的帳戶(即智能合約)。當然,對於一些基於乙太坊的架構而衍生出的區塊鏈項目(比如螞蟻區塊鏈),還可以對區塊鏈支援的帳戶類型,進行進一步的擴展,在本說明書中不進行特別限定。
對於區塊鏈中的帳戶而言,通常會透過一個結構體,來維護帳戶的帳戶狀態。當區塊中的交易被執行後,區塊鏈中與該交易相關的帳戶的狀態通常也會發生變化。
以乙太坊為例,帳戶的結構體通常包括Balance,Nonce,Code和Storage等欄位。其中:
Balance欄位,用於維護帳戶目前的帳戶餘額;
Nonce欄位,用於維護該帳戶的交易次數;它是用於保障每筆交易能且只能被處理一次的計數器,有效避免重播攻擊;
Code欄位,用於維護該帳戶的合約代碼;在實際應用中,Code欄位中通常僅維護合約代碼的hash值;因而,Code欄位通常也稱之為Codehash欄位。
Storage欄位,用於維護該帳戶的儲存內容(預設欄位值為空);對於合約帳戶而言,通常會分配一個獨立的儲存空間,用以儲存該合約帳戶的儲存內容;該獨立的儲存空間通常稱之為該合約帳戶的帳戶儲存。合約帳戶的儲存內容通常會構建成MPT(Merkle Patricia Trie)樹的資料結構儲存在上述獨立的儲存空間之中;其中,基於合約帳戶的儲存內容構建成的MPT樹,通常也稱之為Storage樹。而Storage欄位通常僅維護該Storage樹的根節點;因此,Storage欄位通常也稱之為StorageRoot欄位。
其中,對於外部帳戶而言,以上顯示的Code欄位和Storage欄位的欄位值均為空值。
此外,在實際應用中,不論是公有鏈、私有鏈還是聯盟鏈,都可能提供智能合約(Smart contract)的功能。區塊鏈上的智能合約是在區塊鏈上可以被交易觸發執行的合約。智能合約可以透過代碼的形式定義。
以乙太坊為例,支援使用者在乙太坊網路中創建並呼叫一些複雜的邏輯。乙太坊作為一個可程式設計區塊鏈,其核心是乙太坊虛擬機器(EVM),每個乙太坊節點都可以運行EVM。EVM是一個圖靈完備的虛擬機器,透過它可以實現各種複雜的邏輯。使用者在乙太坊中發布和呼叫智能合約就是在EVM上運行的。實際上,EVM直接運行的是虛擬機器碼(虛擬機器位元組碼,下簡稱“位元組碼”),所以部署在區塊鏈上的智能合約可以是位元組碼。
如圖1所示,Bob將一筆包含創建智能合約資訊的交易(Transaction)發送到乙太坊網路後,各節點均可以在EVM中執行這筆交易。其中,圖中1中交易的From欄位用於記錄發起創建智能合約的帳戶的位址,交易的Data欄位的欄位值保存的合約代碼可以是位元組碼,交易的To欄位的欄位值為一個null(空)的帳戶。當節點間透過共識機制達成一致後,這個智能合約成功創建,後續用戶可以呼叫這個智能合約。
智能合約創建後,區塊鏈上出現一個與該智能合約對應的合約帳戶,並擁有一個特定的位址;比如,圖1中各節點中的“0x68e12cf284…”就代表了創建的這個合約帳戶的位址;合約代碼(Code)和帳戶儲存(Storage)將保存在該合約帳戶的帳戶儲存中。智能合約的行為由合約代碼控制,而智能合約的帳戶儲存則保存了合約的狀態。換句話說,智能合約使得區塊鏈上產生包含合約代碼和帳戶儲存的虛擬帳戶。
前述提到,包含創建智能合約的交易的Data欄位保存的可以是該智能合約的位元組碼。位元組碼由一連串的位元組組成,每一位元組可以標識一個操作。基於開發效率、可讀性等多方面考慮,開發者可以不直接書寫位元組碼,而是選擇一門高階語言編寫智能合約代碼。例如,高階語言可以採用諸如Solidity、Serpent、LLL語言等。對於採用高階語言編寫的智能合約代碼,可以經過編譯器編譯,產生可以部署到區塊鏈上的位元組碼。
以Solidity語言為例,用其編寫的合約代碼與物件導向程式設計語言中的類(Class)很相似,在一個合約中可以聲明多種成員,包括狀態變數、函數、函數修改器、事件等。狀態變數是永久儲存在智能合約的帳戶儲存(Storage)欄位中的值,用於保存合約的狀態。
如圖2所示,仍以乙太坊為例,Bob將一筆包含呼叫智能合約資訊的交易發送到乙太坊網路後,各節點均可以在EVM中執行這筆交易。其中,圖2中交易的From欄位用於記錄發起呼叫智能合約的帳戶的位址,To欄位用於記錄被呼叫的智能合約的位址,交易的Data欄位用於記錄呼叫智能合約的方法和參數。呼叫智能合約後,合約帳戶的帳戶狀態可能改變。後續,某個用戶端可以透過接入的區塊鏈節點(例如圖2中的節點1)查看合約帳戶的帳戶狀態。
智能合約可以以規定的方式在區塊鏈網路中每個節點獨立的執行,所有執行記錄和資料都保存在區塊鏈上,所以當這樣的交易執行完畢後,區塊鏈上就保存了無法篡改、不會丟失的交易憑證。
創建智能合約和呼叫智能合約的示意圖如圖3所示。乙太坊中要創建一個智能合約,需要經過編寫智能合約、變成位元組碼、部署到區塊鏈等過程。乙太坊中呼叫智能合約,是發起一筆指向智能合約位址的交易,各個節點的EVM可以分別執行該交易,將智能合約代碼分散式的運行在乙太坊網路中每個節點的虛擬機器中。
以乙太坊代表的傳統的區塊鏈項目,為了在區塊鏈上實現“價值轉移”,通常都支持將現實世界的貨幣轉換為能夠在鏈上流通的虛擬代幣。
而在區塊鏈領域,對於一些基於乙太坊的架構而衍生出的區塊鏈專案(比如螞蟻區塊鏈),通常不再支持將現實世界的貨幣轉換為能夠在鏈上流通的虛擬代幣的功能;取而代之的是,在這些區塊鏈專案中,可以將現實世界中的一些非貨幣屬性的實體資產,轉化成為能夠在區塊鏈上流通的虛擬資產。
其中,需要說明的是,將現實世界中的非貨幣屬性的實體資產轉化為區塊鏈上的虛擬資產,通常是指將該實體資產與區塊鏈上的虛擬資產進行“錨定”,作為這些虛擬資產的價值支撐,進而在區塊鏈上產生與實體資產的價值匹配,且能夠在區塊鏈上的區塊鏈帳戶之間進行流通的虛擬資產的過程。
在實現時,可以對區塊鏈支援的帳戶類型進行擴展,在區塊鏈支援的帳戶類型的基礎上,再擴展出一種資產帳戶(也稱之為資產物件);比如,可以在乙太坊支援的外部帳戶、合約帳戶的基礎上,再擴展出一種資產帳戶;擴展出的該資產帳戶,即為可以將現實世界中的非貨幣屬性的實體資產作為價值支撐,且可以在區塊鏈帳戶之間流通的虛擬資產。
對於接入這類區塊鏈的用戶而言,除了可以在區塊鏈上完成用戶帳戶、智能合約的創建以外,在區塊鏈上創建一筆與現實世界的非貨幣屬性的實體資產價值匹配的虛擬資產,在區塊鏈上進行流通;
例如,用戶可以將持有的房產、股票、貸款合同、票據、應收賬款等非貨幣屬性的實體資產,轉換為價值匹配的虛擬資產在區塊鏈上流通。
其中,對於上述資產帳戶而言,具體也可以透過一個結構體,來維護帳戶的帳戶狀態。上述資產帳戶的結構體所包含的內容,可以與乙太坊相同,當然也可以基於實際的需求進行設計;
在一種實現方式中,以上述資產帳戶的結構體所包含的內容與乙太坊相同為例,上述資產帳戶的結構體也可以包括以上描述的Balance,Nonce,Code和Storage等欄位。
需要說明的是,在乙太坊中,Balance欄位通常用於維護帳戶目前的帳戶餘額;而對於基於乙太坊的架構而衍生出的區塊鏈項目而言,由於其可能並不支援將現實世界的貨幣轉換為能夠在鏈上流通的虛擬代幣,因此在這類區塊鏈中,可以對Balance欄位的含義進行擴展,不再表示帳戶的“餘額”,而是用於維護帳戶持有的“虛擬資產”對應的資產帳戶的位址資訊。其中,在實際應用中,Balance欄位中可以維護多筆“虛擬資產”對應的資產帳戶的位址資訊。
在這種情況下,以上顯示的外部帳戶、合約帳戶和資產帳戶,均可以透過在Balance欄位中添加需要持有的“虛擬資產”對應的資產帳戶的位址資訊,來持有這筆虛擬資產。即除了外部帳戶和合約帳戶以外,資產帳戶本身也可以持有虛擬資產。
對於資產帳戶而言,Nonce,Code欄位的欄位值可以為空值(也可以不為空);而Storage欄位的欄位值可以不再是空值;Storage欄位可以用於維護與該資產帳戶對應的“虛擬資產”的資產狀態。其中,在Storage欄位中維護與該資產帳戶對應的“虛擬資產”的資產狀態的具體方式,可以基於需求靈活的進行設計,不再贅述。
在基於乙太坊的架構而衍生出的區塊鏈項目中,用戶可以透過以下顯示的實現方式,在區塊鏈上創建一筆與現實世界的非貨幣屬性的實體資產價值匹配的虛擬資產:
在一種實現方式中,可以對區塊鏈支援的交易類型進行擴展,擴展出一種用於創建虛擬資產的交易;比如,乙太坊支援的交易類型通常包括普通的轉帳交易、創建智能合約的交易和呼叫智能合約的交易,則可以在以上三種類型的交易的基礎上,再擴展出一種用於創建虛擬資產的交易。
在這種情況下,使用者可以透過用戶端向區塊鏈網路中發布一筆用於創建虛擬資產的交易,由區塊鏈中的節點設備在本地的EVM中執行這筆交易,來為該使用者創建虛擬資產。當各節點設備透過共識機制達成一致後,這筆虛擬資產成功創建,區塊鏈上出現一個與這筆虛擬資產對應的資產帳戶,並擁有一個特定的位址。
在另一種實現方式中,也可以在區塊鏈上部署用於創建虛擬資產的智能合約;其中,部署用於創建虛擬資產的智能合約的過程不再贅述。
在這種情況下,使用者可以透過用戶端向區塊鏈網路中發布一筆用於呼叫該智能合約的交易,由區塊鏈中的節點設備在本地的EVM中執行這筆交易,並在EVM中運行智能合約相關的合約代碼,來為該用戶創建虛擬資產。當各節點設備透過共識機制達成一致後,這筆虛擬資產成功創建,區塊鏈上出現一個與這筆虛擬資產對應的資產帳戶,並擁有一個特定的位址。
當然,對於一些基於乙太坊的架構而衍生出的區塊鏈項目,如果其也支援將現實世界的貨幣轉換為能夠在鏈上流通的虛擬代幣的功能,那麼仍然可以將現實世界中的一些非貨幣屬性的實體資產,轉化成為能夠在區塊鏈上流通的虛擬代幣的形式,在區塊鏈上流通,在本說明書中不再贅述。
在跨鏈場景下,多個區塊鏈可以透過跨鏈中繼實現跨鏈對接。
其中,跨鏈中繼,可以透過橋接介面與多個區塊鏈分別進行對接,並基於實現的資料搬運邏輯,完成該多個區塊鏈之間的跨鏈資料同步。
在實現上述跨鏈中繼時所採用的跨鏈技術,在本說明書中不進行特別限定;例如,在實際應用中,可以透過側鏈技術、公證人技術等跨鏈機制,將多個區塊鏈連接起來。
當多個區塊鏈透過跨鏈中繼實現對接之後,區塊鏈之間就可以去讀取並認證其它區塊鏈上的資料,也可以透過跨鏈中繼去呼叫其它區塊鏈上部署的智能合約。
區塊鏈上部署的智能合約,除了可以使用區塊鏈上存證的資料以外,也可以透過Oracle預言機,來引用鏈外的資料實體上的資料,進而實現智能合約與真實世界的資料實體之間的資料交互。鏈外的資料實體,可以包括諸如部署在鏈外的中心化的伺服器或者資料中心,等等。
其中,與跨鏈中繼不同的是,Oracle預言機的功能並不是將一個區塊鏈上的資料同步到另一個區塊鏈上,而是將鏈外的資料實體上的資料同步到區塊鏈上;
亦即,跨鏈中繼用於連接兩個區塊鏈,而Oracle預言機用於連接區塊鏈與鏈外的資料實體,實現區塊鏈與真實世界的資料交互。
隨著區塊鏈的業務場景的不斷豐富,除了諸如轉帳等與價值轉移息息相關的業務以外,越來越多的區塊鏈項目開始引入一些與價值轉移無關的傳統業務場景;例如,業務系統可以與業務區塊鏈對接,在業務區塊鏈上來完成諸如電子票據的開具、報銷等傳統的業務場景。
在傳統的電子票據的開具場景中,使用者需要向開票方申請開票,開票方可以基於開票監管部統一分發的票據紙為使用者開具紙質發票。或者,開票方可以為使用者開具電子發票。
本說明書旨在提供一種基於區塊鏈的為待開具電子票據的票據資訊分配電子票據號碼,並基於分配的電子票據資訊產生電子票據的新的開票方式,可以使得使用者基於區塊鏈實現自主開票。
在具體實現時,區塊鏈上維護了各個開票方的區塊鏈帳戶,帳戶中儲存了各開票方可開具的電子票據號段。
當區塊鏈上的節點設備接收到開票發起方發送的攜帶有待開具的電子票據的票據資訊的目標交易,呼叫部署在所述區塊鏈上的智能合約中的校驗邏輯,對所述票據資訊進行合法性校驗。
在合法性校驗通過後,區塊鏈上的節點設備進一步呼叫所述智能合約中的分配邏輯,從所述電子票據的開票方對應的區塊鏈帳戶中維護的電子票據可用號段中,為該票據資訊分配電子票據號碼。
區塊鏈上的節點設備或者開票發起方可以基於所述票據資訊和電子票據號碼以及開票監管方的電子票據範本產生電子票據。
在上述技術方案中,區塊鏈的節點設備可回應於開票發起發發送的目標交易,對在確定該目標交易中攜帶的票據資訊合法性校驗通過後,呼叫區塊鏈上部署的智能合約中的分配邏輯,從所述電子票據的開票方對應的區塊鏈帳戶中維護的電子票據可用號段中,為該票據資訊分配電子票據號碼。後續,區塊鏈的節點設備或者開票發起方可以基於票據資訊、電子票據號碼和電子票據範本,自主產生電子票據,從而實現了使用者透過區塊鏈獲取待開具的電子票據的電子票據號碼,以及使用者自主開具電子票據。
參見圖4,圖4是本說明書一示例性實施例顯示的一種基於區塊鏈的票據號碼分配組網的架構圖。
如圖4所示,該組網包括:開票發起方、開票方、開票監管方和區塊鏈。
其中,上述開票發起方是指需要開具電子票據的一方,比如該開票發起方可以是用戶個人,也可以是需要開具電子票據的單位等,這裡只是對開票發起發進行示例性地說明,不進行具體地限定。
上述開票方,是指可以進行電子票據開具的開票機構。
當然,開票方也可以作為開票發起方來向別的開票發起方發起開票操作。
比如,使用者在電子平台1(即單位)上購買了一部手機需要向該電子平台1開具發票,則在該場景中,用戶為開票發起方,電子平台1為開票方。
再例如,電子平台1的單位在電子平台2上購買了一批電腦需要向電子平台2開具發票。則在該場景中,電子平台1的單位為開票發起方,電子平台2為開票方。
上述開票監管方,是指具有開票監管能力的一方。比如,開票監管方可以是財政機構。比如,開票監管方可以是市級財政部、省級財政部等。
通常,該開票監管方會頒布不同電子票據類型對應的電子票據範本。比如,增值稅發票對應有增值稅發票票據範本(類似傳統的增值稅發票的票據紙),普通發票對應有普通發票票據範本(類似於普通發票的票據紙)。
開票監管方可以將不同票據類型對應的電子票據範本發布在區塊鏈上進行存證,當然,開票監管方還可將該電子票據範本在鏈下伺服器(如開票監管方伺服器等)進行儲存,並將儲存位址發布至區塊鏈進行存證。或者,開票監管方還可將電子票據範本發布在其他區塊鏈上進行存證。這裡只是對開票監管方存證的電子票據範本進行示例性地說明,不進行具體地限定。
參見圖5,圖5是本說明書一示例性實施例顯示的一種基於區塊鏈的票據號碼分配方法的流程圖,該方法可應用在區塊鏈的節點設備上,可包括如下所示步驟。
步驟502:接收開票發起方發送的目標交易;所述目標交易包括待開具的電子票據的票據資訊。
步驟504:回應於所述目標交易,呼叫部署在所述區塊鏈上的智能合約中的校驗邏輯,對所述票據資訊進行合法性校驗;
其中,待開具的電子票據的票據資訊可以包括傳統紙質發票上需要填寫的資訊,比如該票據資訊可包括:電子票據類型、付款方資訊、收款方資訊、商品或服務明細、金額、稅率、稅額、開票日期等。
其中,付款方資訊可包括:付款方名稱、納稅人識別號、地址及電話、開戶行及帳號等。
收款方資訊可包括:收款方名稱、納稅人識別號、地址及電話、開戶行及帳號等。
當然,這裡只是對上述票據資訊、付款方資訊、收款方資訊進行示例性地說明,不進行具體地限定。
此外,在本說明書提供的實施例中,該區塊鏈上還部署了用於向待開具的電子票據的票據資訊分配票據號碼的智能合約。
其中,在部署的智能合約中,可以包括校驗邏輯和分配邏輯。該校驗邏輯可以用於校驗票據資訊是否合法。該校驗票據資訊是否合法的邏輯可以由該智能合約的開發者以代碼的形式寫入至該智能合約。
上述分配邏輯,用於在確定票據資訊合法後,從所述電子票據的開票方對應的區塊鏈帳戶中維護的電子票據可用號段中,為所述票據資訊分配電子票據號碼。
當上述智能合約部署完成後,上述開票發起方(普通使用者或者單位)等均可透過用戶端構造目標交易。該目標交易中攜帶有待開具的電子票據的票據資訊。然後,開票發起方可以將該目標交易發布至區塊鏈。
區塊鏈上的節點設備在接收到該目標交易後,可回應於該目標交易,呼叫部署在區塊鏈上的智能合約中聲明的校驗邏輯,對票據資訊進行合法性校驗。
其中,該合法性校驗可包括:開票發起方的權限校驗及/或,開票方的開票權限校驗。
對於上述開票發起方的權限校驗,可以是校驗上述開票發起方是否具有針對該票據資訊的發起開票的權限。例如,該開票發起方是否為票據資訊中的付款方。
舉例來說,上述目標交易還可包括開票發起方的使用者標識(比如納稅人識別號)。該區塊鏈中的節點設備在呼叫上述智能合約中的校驗邏輯,對票據資訊進行校驗時,可先獲取票據資訊中記錄的付款方的使用者標識,再檢測開票發起方的使用者標識與付款方的使用者標識是否一致,
如果開票發起方的使用者標識與付款方的使用者標識一致,則該區塊鏈的節點設備可確定開票發起方的權限校驗通過。
如果開票發起方的使用者標識與付款方的使用者標識不一致,則該區塊鏈的節點設備可確定開票發起方的權限校驗不通過。
對於上述開票方的開票權限校驗,可以是校驗該開票方是否具有開具某種類型的電子票據的權限。例如,假設票據資訊攜帶的票據類型為增值稅發票,則可以檢測該開票方是否具有開具增值稅發票的權限。
舉例來說,該票據資訊中包括收款方(即開票方)的使用者表標識、以及票據類型。該區塊鏈的節點設備可呼叫上述智能合約中的校驗邏輯,檢測該收款方是否具有開具該類型的電子票據的權限。
如果該收款方具有開具該類型的電子票據的權限,則該開票方的開票權限校驗通過。
如果該收款方不具有該類型的電子票據的權限,則該開票方的開票權限校驗不通過。
當然,當然在實際應用中,該合法性校驗還可包括與實際應用相關的其他校驗,這裡只是對合法性校驗進行示例性地說明,不對該合法性校驗進行具體地限定。
步驟506:如果所述合法性校驗通過,進一步呼叫所述智能合約中的分配邏輯,從所述電子票據的開票方對應的區塊鏈帳戶中維護的電子票據可用號段中,為所述票據資訊分配電子票據號碼。
在本說明書實施例中,區塊鏈上維護了各個開票方的區塊鏈帳戶,該開票方帳戶可以是上文所述資產帳戶。
對於該開票方的區塊鏈帳戶而言,也可以透過一個結構體來維護帳戶的帳戶狀態。該開票方的區塊鏈帳戶的結構體所包含的內容,可以與乙太坊相同,當然也可以基於實際的需求進行設計。
在一種實現方式中,該開票方帳戶的結構體所包含的內容與乙太坊相同為例,該開票方的結構體也可以包括上文描述的Balance,Nonce,Code和Storage等欄位。
在本說明書實施例中,上述Balance欄位可以不再表示“餘額”的概念,而是表示電子票據可用號段,而上述Storage欄位中可表示電子票據的已用號段。當然,Storage欄位中還可攜帶其他資訊,這裡只是示例性說明,不對其進行具體地限定。
當區塊鏈的節點設備確定針對票據資訊的合法性校驗通過,則進一步呼叫該智能合約中的分配邏輯,從該電子票據的開票方對應的區塊鏈帳戶中維護的電子票據可用號段中,為該票據資訊分配電子票據號碼。
具體來說,開票方對應的區塊鏈帳戶中維護了開票方可開具的電子票據類型對應的可用號段。
比如,開票方對應的區塊鏈帳戶中維護了增值稅發票對應的可用號段,普通發票對應的可用號段等。
在從該電子票據的開票方對應的區塊鏈帳戶中維護的電子票據可用號段中,為該票據資訊分配電子票據號碼時,區塊鏈節點設備可在該開票方對應的區塊鏈帳戶中,確定該待開具的電子票據類型對應的可用號段。然後在確定出的可用號段中,為該待開具的電子票據的票據資訊分配電子票據號碼。
舉例來說,該待開具的電子票據的票據資訊中攜帶有票據類型,假設該票據類型為增值稅發票。
開票方對應的區塊鏈帳戶中維護的可用號段如表1所示。
當區塊鏈的節點設備確定針對票據資訊的合法性校驗通過,則進一步呼叫該智能合約中的分配邏輯,從該開票方對應的區塊鏈帳戶維護的可用號段中,確定出該待開具電子票據的票據類型(即增值稅發票)的可用號段1。然後,區塊鏈節點設備可以從可用號段1中為該票據資訊分配電子票據票號。
在完成上述電子票據號分配後,區塊鏈的節點設備可以更新開票方的區塊鏈帳戶中維護的可用號段和已用號段。
比如,開票方的區塊鏈帳戶中維護的增值稅發票的可用號段為1-100,已用號段為101-200,假設將100分配給票據資訊。在分配完成後,可將區塊鏈帳戶中維護的增值稅發票的可號段更為1-99,已用號段更新為100-200。普通發票的可用號段和已用號段不變。
此外,本說明書還提供了一種電子票據產生方法,可以基於票據資訊、電子票據號碼和電子票據範本產生電子票據。
方式一:鏈上為票據資訊分配電子票據號碼,鏈下實現電子票據的產生。
在一種可選的實現方式中,當區塊鏈節點設備為票據資訊分配電子號碼後,區塊鏈的節點設備可以將票據資訊以及為該票據資訊分配的電子票據號碼發布到區塊鏈進行存證。
開票發起方可以監聽該區塊鏈,當開票發起方監聽到區塊鏈存證的該票據資訊和該電子票據號碼後,可以獲取開票監管方的電子票據範本。然後,開票發起方可以基於該電子票據範本,將該票據資訊和電子票據號碼產生為電子票據,並將該產生的電子票據發布至區塊鏈進行存證。
下面對獲取電子票據範本進行介紹。
在具體實現時,開票監管方將電子票據範本儲存在開票監管方服務端。然後,開票監管方可以將該電子票據範本的儲存位址發布至區塊鏈上進行存證。基於此,區塊鏈上存證了電子票據範本的儲存位址。
當開票發起方監聽到區塊鏈存證的該票據資訊和該電子票據號碼後,開票發起方可以從區塊鏈上獲取開票監管方的電子票據範本的儲存位址。然後,開票發起方可以基於該儲存位址從開票監管方服務端上獲取電子票據範本。
方式二:鏈上為票據資訊分配電子票據號碼,鏈上實現電子票據的產生。
在該方式中,上述區塊鏈上部署的智能合約中還包括開票邏輯。該開票邏輯用於獲取電子票據範本,並基於電子票據範本,將該票據資訊和電子票據票號產生為電子票據。
當然,由於電子票據範本儲存方式不同,該區塊鏈上的節點設備產生電子票據的方式也不同。
1)電子票據範本儲存在開票監管方服務端上,區塊鏈上節點設備透過Oracle預言機獲取開票監管方服務端上的電子票據範本,並基於該電子票據範本,將該票據資訊和電子票據號碼產生電子票據。
在具體實現時,區塊鏈的節點設備可透過Oracle預言機與所述開票監管方的服務端連接。
當區塊鏈的節點設備為所述票據資訊分配電子票據號碼後,區塊鏈的節點設備可以呼叫該智能合約中的開票邏輯,透過Oracle預言機從所述開票監管方的服務端中獲取電子票據範本,基於獲取到的電子票據範本,將所述票據資訊和所述電子票據號碼產生為電子票據並將產生的電子票據發布至所述區塊鏈進行存證。
其中,關於Oracle預言機的描述可參見上文,這裡不再贅述。
2)電子票據範本可以儲存在本區塊鏈上。本區塊鏈上的節點設備可以基於本區塊鏈上存證的該電子票據範本,將該票據資訊和電子票據號碼產生電子票據。
在具體實現是,開票監管方可以將電子票據範本發布至本區塊鏈上進行存證。
當區塊鏈的節點設備為所述票據資訊分配電子票據號碼後,區塊鏈的節點設備可以呼叫該智能合約中的開票邏輯,基於本區塊鏈存證的該開票監管方的電子票據範本,將所述票據資訊和所述電子票據號碼產生為電子票據並將產生的電子票據發布至所述區塊鏈進行存證。
3)電子票據範本可以儲存在其他區塊鏈上,本區塊鏈上的節點設備可透過跨鏈中繼從其他區塊鏈上獲取電子票據範本,並基於該電子票據範本,將該票據資訊和電子票據號碼產生電子票據。
在具體實現時,開票監管方可以單獨維護一個財政區塊鏈。開票監管方可以將電子票據範本發布至該財政區塊鏈上進行存證。
本區塊鏈可以透過跨鏈中繼與該財政區塊鏈對接。
當區塊鏈的節點設備為所述票據資訊分配電子票據號碼後,區塊鏈的節點設備可以呼叫該智能合約中的開票邏輯,透過跨鏈中繼從該財政區塊鏈上獲取電子票據範本。區塊鏈的節點設備可基於獲取到的電子票據範本,將所述票據資訊和所述電子票據號碼產生為電子票據並將產生的電子票據發布至所述區塊鏈進行存證。
由上述描述可知,區塊鏈的節點設備可回應於開票發起發發送的目標交易,對在確定該目標交易中攜帶的票據資訊合法性校驗通過後,呼叫區塊鏈上部署的智能合約中的分配邏輯,從所述電子票據的開票方對應的區塊鏈帳戶中維護的電子票據可用號段中,為該票據資訊分配電子票據號碼。後續,區塊鏈的節點設備或者開票發起方可以基於票據資訊、電子票據號碼和電子票據範本,自主產生電子票據,從而實現了使用者透過區塊鏈獲取待開具的電子票據的電子票據號碼,以及使用者自主開具電子票據。
與上述方法實施例相對應,本申請還提供了裝置的實施例。
與上述方法實施例相對應,本說明書還提供了一種基於區塊鏈的票據號碼分配裝置的實施例。本說明書的基於區塊鏈的票據號碼分配裝置的實施例可以應用在電子設備上。裝置實施例可以透過軟體來實現,也可以透過硬體或者軟硬體結合的方式來實現。以軟體實現為例,作為一個邏輯意義上的裝置,是透過其所在電子設備的處理器將非易失性記憶體中對應的電腦程式指令讀取到記憶體中運行形成的。從硬體層面而言,如圖6所示,為本說明書的基於區塊鏈的票據號碼分配裝置所在電子設備的一種硬體結構圖,除了圖6所示的處理器、記憶體、網路介面、以及非易失性記憶體之外,實施例中裝置所在的電子設備通常根據該電子設備的實際功能,還可以包括其他硬體,對此不再贅述。
參見圖7,圖7是本說明書一示例性實施例顯示的一種基於區塊鏈的票據號碼分配裝置的方塊圖。
所述裝置應用於區塊鏈的節點設備,所述裝置包括:
接收模組701,用於接收開票發起方發送的目標交易;所述目標交易包括待開具的電子票據的票據資訊;
校驗模組702,用於回應於所述目標交易,呼叫部署在所述區塊鏈上的智能合約中的校驗邏輯,對所述票據資訊進行合法性校驗;
分配模組703,用於如果所述合法性校驗通過,進一步呼叫所述智能合約中的分配邏輯,從所述電子票據的開票方對應的區塊鏈帳戶中維護的電子票據可用號段中,為所述票據資訊分配電子票據號碼。
可選地,所述裝置還包括:
發布模組704(圖7中未顯示),將所述票據資訊以及為所述票據資訊分配的電子票據號碼發布至所述區塊鏈進行存證,以使所述開票發起方在監聽到所述票據資訊和所述電子票據號碼後,基於開票監管方的電子票據範本,將所述票據資訊和所述電子票據號碼產生為電子票據。
可選地,所述區塊鏈上還存證了所述開票監管方的電子票據範本的儲存位址;
所述發布模組704,將所述票據資訊以及為所述票據資訊分配的電子票據號碼發布至所述區塊鏈進行存證,以使所述開票發起方在監聽到所述票據資訊和所述電子票據號碼後,從所述區塊鏈上獲取所述開票監管方的電子票據範本的儲存位址,並基於所述儲存位址從開票監管方服務端上獲取所述電子票據範本,並將所述票據資訊和所述電子票據號碼產生為電子票據。
可選地,所述裝置還包括:
第一產生模組705(圖7中未顯示),呼叫部署在所述區塊鏈上的智能合約中的開票邏輯,基於所述區塊鏈上儲存的開票監管方的電子票據範本,將所述票據資訊和所述電子票據號碼產生為電子票據,並將產生的電子票據發布至所述區塊鏈進行存證。
可選地,所述區塊鏈的節點設備透過Oracle預言機與所述開票監管方的服務端連接;
所述裝置還包括:
第二產生模組706(圖7中未顯示),呼叫部署在所述區塊鏈上的智能合約中的開票邏輯,透過Oracle預言機從所述開票監管方的服務端中獲取電子票據範本,基於獲取到的電子票據範本,將所述票據資訊和所述電子票據號碼產生為電子票據並將產生的電子票據發布至所述區塊鏈進行存證。
可選地,所述票據資訊包括:所述電子票據的票據類型;所述電子票據的開票方對應的區塊鏈帳戶中維護了所述開票方可開具的票據類型對應的可用號段;
所述分配單元703,在所述電子票據的開票方對應的區塊鏈帳戶中維護的電子票據可用號段中,確定所述待開具的電子票據的票據類型對應的可用號段;
從確定出的可用號段中,為所述票據資訊分配電子票據號碼。
可選地,所述合法性校驗包括:開票發起方權限校驗、及/或,開票方的開票權限校驗。
可選地,所述區塊鏈為聯盟鏈,所述聯盟鏈的聯盟成員包括:作為開票監管方的財政機構、作為開票方的開票機構。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、蜂巢式電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、穿戴式設備或者這些設備中的任意幾種設備的組合。
在一個典型的配置中,電腦包括一個或多個處理器 (CPU)、輸入/輸出介面、網路介面和記憶體。
記憶體可能包括電腦可讀媒體中的非永久性記憶體,隨機存取記憶體 (RAM) 及/或非易失性記憶體等形式,如唯讀記憶體 (ROM) 或快閃記憶體(flash RAM)。記憶體是電腦可讀媒體的示例。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變記憶體 (PRAM)、靜態隨機存取記憶體 (SRAM)、動態隨機存取記憶體 (DRAM)、其他類型的隨機存取記憶體 (RAM)、唯讀記憶體 (ROM)、電可抹除可程式設計唯讀記憶體 (EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體 (CD-ROM)、數位多功能光碟 (DVD) 或其他光學儲存、磁盒式磁帶、磁片儲存、量子記憶體、基於石墨烯的儲存媒體或其他磁性儲存設備或任何其他非傳輸媒體,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀媒體不包括暫態性電腦可讀媒體 (transitory media),如調變的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在圖式中描繪的過程不一定要求顯示的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和平行處理也是可以的或者可能是有利的。
在本說明書一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本說明書一個或多個實施例。在本說明書一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“及/或”是指並包含一個或多個相關聯的列出專案的任何或所有可能組合。
應當理解,儘管在本說明書一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本說明書一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於確定”。
以上所述僅為本說明書一個或多個實施例的較佳實施例而已,並不用以限制本說明書一個或多個實施例,凡在本說明書一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本說明書一個或多個實施例保護的範圍之內。