本發(fā)明屬于區(qū)塊鏈技術領域,具體的說是一種基于區(qū)塊鏈的智能合約的眾包構建方法。
背景技術:
在社會生產(chǎn)中,不管是公司、機構還是個人都會遇到一些自身難以解決的問題。這時,公司或機構可能會選擇將這樣的問題外包給別的公司或機構去完成。隨著互聯(lián)網(wǎng)的發(fā)展,人們提出了一種新的解決辦法,將企業(yè)自身不能解決的問題以自由自愿的形式外包給非特定的大眾的方法。這種外包的任務通常由個人來承擔,但如果涉及到需要多人協(xié)作完成的任務,也有可能以依靠開源的個體生產(chǎn)的形式出現(xiàn)。
傳統(tǒng)意義上的外包更多是交給專業(yè)性的組織或團隊,這種關系是有針對性和契約性的;而互聯(lián)網(wǎng)上的外包范圍則更加寬泛,參與者可以是該領域的專業(yè)人士,也可以是非專業(yè)人士。人們將這種一對多的外包形式稱為眾包,眾包充分利用了互聯(lián)網(wǎng)用戶多元化的背景。在某種程度上說,眾包提供了一種組織勞動力的全新方式?;ヂ?lián)網(wǎng)用戶復雜、多元化的文化、教育、地域背景則進一步吸引了眾多企業(yè)轉向利用互聯(lián)網(wǎng)眾包獲取解決方案。
然而目前的眾包協(xié)議的簽訂必須依賴于第三方平臺,需求任務的信息來源的真實性完全取決于第三方的可信度得不到實質(zhì)性的保障,且需要耗費較多的管理成本。對于需求任務的解決方,由于沒有有效的解決方案監(jiān)控措施,導致目前眾包的解決方案良莠不齊,甚至于存在很多抄襲、虛假的現(xiàn)象,任務提出者并不能得到滿意的解決方案且耗費時間和成本;另一方面解決方案提出者的知識產(chǎn)權也因為對合約執(zhí)行過程缺乏監(jiān)控,而得不到有效的保護。
技術實現(xiàn)要素:
本發(fā)明是為了解決上述現(xiàn)有技術存在的不足之處,提出一種基于區(qū)塊鏈的智能合約的眾包構建方法,以期能通過去中心化的分布式數(shù)據(jù)存儲方法解決中心化的數(shù)據(jù)存儲存在的信息易篡改、不可靠問題,通過智能合約程序自動執(zhí)行的方式解決對合約執(zhí)行狀態(tài)的監(jiān)控問題,從而降低眾包合約構建及執(zhí)行過程中存在的風險。
本發(fā)明為解決技術問題采用如下技術方案:
本發(fā)明一種基于區(qū)塊鏈的智能合約的眾包構建方法的特點是按如下步驟執(zhí)行:
步驟一、定義所述智能合約的用戶集合為U={Vα,V},Vα為所述智能合約的甲方,V為所述智能合約的乙方集合,并有:V={V1,V2,...,Vi,...,Vm},Vi為所述乙方集合中第i個用戶,1≤i≤m;
步驟二、智能合約任務和規(guī)則的發(fā)布:
所述甲方Vα用自身私鑰對包含任務和規(guī)則的智能合約進行簽名,并由礦工將簽名過的智能合約作為區(qū)塊TR添加到區(qū)塊鏈的主鏈上;所述智能合約的任務記為T={t1,t2,...,tp,...,tn},tp為第p個子任務;1≤p≤n;
步驟三、合約任務的認領:
步驟3.1、定義以所述區(qū)塊TR為起點的支鏈上的區(qū)塊數(shù)量為ρ,并初始化ρ=0;
步驟3.2、假設第i個用戶Vi期望認領所述任務中的若干個子任務,則第i個用戶Vi查詢所述區(qū)塊TR為起點的支鏈上是否存在終止區(qū)塊;若存在,則表示所述智能合約已經(jīng)簽訂完成,若不存在,則執(zhí)行步驟3.3;
步驟3.3、初始化p=1;
步驟3.4、由所述第i個用戶Vi標記所述任務中第p個子任務tp的認領意愿狀態(tài)當代表第i個用戶Vi期望認領第p個子任務tp;當代表第i個用戶Vi不認領第p個子任務tp;
步驟3.5、將p+1賦值給p后,返回步驟3.4,直到p=n為止,從而得到所述第i個用戶Vi對所有子任務的認領意愿狀態(tài);
步驟3.6、判斷是否成立,若成立,則表示第i個用戶Vi期望認領所有子任務并能獨立完成,從而根據(jù)所述智能合約的規(guī)則簽訂所述智能合約后,執(zhí)行步驟3.7;否則,執(zhí)行步驟3.8;
步驟3.7、所述甲方Vα和第i個用戶Vi分別對所簽訂的智能合約進行聯(lián)合簽名,并由礦工將聯(lián)合簽名過的智能合約作為區(qū)塊添加到區(qū)塊鏈的主鏈上后,礦工在以所述區(qū)塊TR為起點的支鏈上的添加終止區(qū)塊;
步驟3.8、第i個用戶Vi對所述任務中的每個子任務的認領意愿狀態(tài)進行簽名,并由礦工將簽名過的所有認領意愿狀態(tài)添加到區(qū)塊鏈的支鏈上,同時將ρ+1賦值給ρ;
步驟四、檢查區(qū)塊鏈的支鏈,判斷支鏈上參與智能合約的所有用戶是否能眾包完成所述智能合約的所有子任務:
步驟4.1、定義所述區(qū)塊鏈的支鏈上的所有用戶為{V1′,V2′,...,Vk′,...,Vρ′};Vk′表示所述支鏈上的第k個用戶,1≤k≤ρ;定義第q個子任務tq所分配給的用戶記為Vq″;1≤q≤n;初始化Vq″=NULL;
步驟4.2、初始化q=1;
步驟4.3、初始化k=1;
步驟4.4、判斷是否成立,若成立,則將Vk′賦值給Vq″,并將q+1賦值給q,返回步驟4.3,直到q=n為止;否則,將k+1賦值給k,返回步驟4.4,直到k=ρ為止;
步驟4.5、初始化q=1;
步驟4.6、判斷Vq″=NULL是否成立,若成立,表示存在未認領的子任務,則等待其他用戶認領并返回步驟3.2;若不成立,則將q+1賦值給q,返回步驟4.6,直到q=n為止;
步驟4.7、所有子任務均被認領和分配完成,從而根據(jù)所述智能合約的規(guī)則簽訂所述智能合約;
步驟4.8、所述甲方Vα和所有分配子任務的用戶分別對所簽訂的智能合約進行聯(lián)合簽名,并由礦工將聯(lián)合簽名過的智能合約作為區(qū)塊添加到區(qū)塊鏈的主鏈上后,礦工在以所述區(qū)塊TR為起點的支鏈上的添加終止區(qū)塊。
與現(xiàn)有技術相比,本發(fā)明的有益效果在于:
1、本發(fā)明利用基于區(qū)塊鏈的分布式數(shù)據(jù)存儲技術使得構建的眾包智能合約在沒有第三方的情況下可靠且不可篡改,且眾包智能合約以程序的方式執(zhí)行保障了合約執(zhí)行結果的可預知性。
2、本發(fā)明通過將合約任務以區(qū)塊的形式分布式發(fā)布在區(qū)塊鏈主鏈上,從而省去了第三方的中間環(huán)節(jié),使得任務發(fā)布方和問題解決者可以直接取得聯(lián)系;將合約任務發(fā)布在區(qū)塊鏈主鏈上也使得任務的來源公開透明、需求的內(nèi)容和規(guī)則不可篡改,從而保證了合約任務發(fā)布的可靠性。
3、本發(fā)明通過將用戶對合約任務的完成意愿記錄在以該合約任務區(qū)塊為首的支鏈上,從而記錄了合約任務認領的整個過程,保證了合約簽訂過程的公開透明,也保證了簽訂的合約的可靠性。
4、本發(fā)明簽訂的眾包合約是通過雙方聯(lián)合簽名的、以可執(zhí)行程序的形式發(fā)布在區(qū)塊鏈主鏈的智能合約,具有自動執(zhí)行的特點,從而保障了合約執(zhí)行結果的可預知性,從而避免了合約雙方在合約執(zhí)行過程中可能因結果不滿發(fā)生糾紛的問題。
附圖說明
圖1本發(fā)明流程圖;
圖2本發(fā)明區(qū)塊鏈示意圖。
具體實施方式
如圖1所示,本實施例中,一種基于區(qū)塊鏈的智能合約的眾包構建方法是應用于區(qū)塊鏈用戶之間建立眾包的智能合約的,具體的說是按如下步驟執(zhí)行:
步驟一、定義區(qū)塊鏈用戶中參與構建眾包智能合約的用戶集合為U={Vα,V},Vα為眾包智能合約構建的甲方,V為眾包智能合約構建的乙方集合,并有:V={V1,V2,...,Vi,...,Vm},Vi為乙方集合中的第i個用戶,且有1≤i≤m;
本實施例中,分布式的區(qū)塊鏈數(shù)據(jù)存儲方式對應的是一個P2P網(wǎng)絡,所有使用該區(qū)塊鏈存儲信息的用戶都處于一個對等網(wǎng)絡中,無中心節(jié)點;區(qū)塊鏈的一個區(qū)塊可以是一段時間內(nèi)用戶之間發(fā)生交易的總和,也可以是一個智能合約任務和規(guī)則或由合約雙方簽訂并聯(lián)合簽名的自動執(zhí)行的智能合約,每個區(qū)塊由區(qū)塊頭和區(qū)塊主體兩部分組成;區(qū)塊頭包含區(qū)塊主體的哈希值、時間戳和用于鏈接區(qū)塊的上一區(qū)塊哈希值等,區(qū)塊主體包含實際有效的信息。
步驟二、智能合約任務和規(guī)則的發(fā)布:
甲方Vα用自身私鑰對包含任務和規(guī)則的智能合約進行簽名,然后由礦工通過共識算法驗證簽名信息,并將簽名過的智能合約作為區(qū)塊TR添加到區(qū)塊鏈的主鏈上;智能合約的任務記為T={t1,t2,...,tp,...,tn},tp為第p個子任務;1≤p≤n;區(qū)塊鏈的其他用戶可通過查詢主鏈上的數(shù)據(jù)或者建立區(qū)塊鏈合約任務查詢網(wǎng)站獲取區(qū)塊鏈需求任務信息。因為需求任務通過了全網(wǎng)的共識且通過密碼學方法鏈接在區(qū)塊鏈上,所以保證了需求任務的真實和不可篡改。
步驟三、合約任務的認領:
步驟3.1、定義以區(qū)塊TR為起點的支鏈上的區(qū)塊數(shù)量為ρ,并初始化ρ=0;
本實施例中,支鏈是指記錄其他用戶對該合約任務認領信息的鏈,所以以合約任務和規(guī)則發(fā)布在主鏈上的區(qū)塊TR為支鏈起點,如圖2所示。將用戶認領需求任務的信息記錄在區(qū)塊鏈上使得該信息公開透明,且通過密碼學方法鏈接使得認領信息不可篡改,防止虛假認領。
步驟3.2、假設第i個用戶Vi期望認領合約任務中的若干個子任務,則第i個用戶Vi查詢區(qū)塊TR為起點的支鏈上是否存在終止區(qū)塊;若存在,則表示智能合約已經(jīng)簽訂完成,該合約不會再接受其他用戶提出完成合約任務的申請;若不存在,則執(zhí)行步驟3.3;
步驟3.3、初始化p=1;
步驟3.4、由第i個用戶Vi標記任務中第p個子任務tp的認領意愿狀態(tài)當代表第i個用戶Vi期望認領第p個子任務tp;當代表第i個用戶Vi不認領第p個子任務tp;
步驟3.5、將p+1賦值給p后,返回步驟3.4,直到p=n為止,完成通過從1到n的一次循環(huán)完成用戶Vi對任務中愿意完成子任務的標記,從而得到第i個用戶Vi對所有子任務的認領意愿狀態(tài);
步驟3.6、判斷是否成立,若成立,則表示第i個用戶Vi能夠獨立完成所有合約子任務,這時合約任務發(fā)布的甲方用戶和認領合約任務的乙方用戶根據(jù)智能合約的規(guī)則簽訂所述智能合約,執(zhí)行步驟3.7;若不成立,則表示第i個用戶Vi只能完成合約的部分子任務,執(zhí)行步驟3.8,將用戶Vi的認領意愿記錄在支鏈上;
本實施例中,若有用戶能獨立完成甲方發(fā)布的所有合約子任務,則甲方優(yōu)先與該乙方簽訂智能合約而不再考慮其他用戶對該合約子任務的認領,且能獨立完成合約所有子任務的乙方不必將自己對合約任務的認領記錄在支鏈上。
步驟3.7、甲方Vα和第i個用戶Vi分別對所簽訂的智能合約進行聯(lián)合簽名,并由礦工將聯(lián)合簽名過的智能合約作為區(qū)塊添加到區(qū)塊鏈的主鏈上,然后由礦工在以區(qū)塊TR為起點的支鏈上的添加終止區(qū)塊;防止其他用戶再對該合約任務的認領。
步驟3.8、第i個用戶Vi對任務中的n個子任務的認領意愿狀態(tài)進行簽名,然后由礦工通過共識算法驗證,并將簽名過的認領意愿狀態(tài)添加到區(qū)塊鏈的支鏈上,同時將ρ+1賦值給ρ;
步驟四、檢查區(qū)塊鏈的支鏈,判斷支鏈上參與智能合約的所有用戶是否能眾包完成智能合約的所有子任務:
步驟4.1、定義區(qū)塊鏈的支鏈上的所有用戶為{V1′,V2′,...,Vk′,...,Vρ′};Vk′表示支鏈上的第k個用戶,1≤k≤ρ;定義第q個子任務tq所分配給的用戶記為Vq″;1≤q≤n;初始化所有的Vq″=NULL;
步驟4.2、初始化q=1;
步驟4.3、初始化k=1;
步驟4.4、判斷是否成立,若成立,則表示支鏈上的第k個用戶能完成第q個合約子任務,將第q個子任務tq擬分配給用戶Vk′執(zhí)行Vq″=Vk′、q=q+1,返回步驟4.3,直到q=n為止;否則,將k+1賦值給k,返回步驟4.4,直到k=ρ為止;
本實施例中,上述雙層循環(huán)是對支鏈上用戶認領合約子任務的狀態(tài)進行檢查;一次內(nèi)層循環(huán)檢查一個子任務是否有用戶認領,外層循環(huán)q從1到n表示依次對n個子任務進行檢查。
步驟4.5、初始化q=1;
步驟4.6、判斷Vq″=NULL是否成立,若成立,表示存在未認領的子任務,則等待其他用戶認領并返回步驟3.2;若不成立,則將q+1賦值給q,返回步驟4.6,直到q=n為止;用一次循環(huán)查找是否還有未被領取的子任務。若不存在Vq″=NULL則表示所有子任務均可被完成,執(zhí)行步驟4.7。
步驟4.7、所有子任務均被認領和分配完成,從而根據(jù)智能合約的規(guī)則簽訂智能合約;
步驟4.8、甲方Vα和所有分配子任務的用戶對所簽訂的智能合約進行聯(lián)合簽名,并由礦工將聯(lián)合簽名過的智能合約作為區(qū)塊添加到區(qū)塊鏈的主鏈上后,礦工在以區(qū)塊TR為起點的支鏈上的添加終止區(qū)塊。