IP Library Granted Patent US 12,411,915
Granted Patent B2
US 12,411,915 · App. 17/642,144 · Granted Sep 9, 2025

Storing a program on a blockchain

Inventors: Brock Doiron (London, GB); Craig Steven Wright (London, GB)
Assignee: nChain Licensing AG
G06F21/12G06F21/602H04L9/50
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,411,915
App. No.
17/642,144
Granted
Sep 9, 2025
Kind
B2
Abstract

A method comprising: retrieving a header file from a first transaction recorded on a blockchain maintained across a plurality of nodes of a blockchain network. The header file comprises: program header information, and reference information comprising one or more respective transaction IDs of one or more respective second transactions stored on the blockchain. Each second transaction comprises a respective section of a body of the program file, at least one of the sections comprising runnable program code. The method comprises, from the blockchain, retrieving the respective section of the program file from at least one of the second transactions based on the reference information; and running a program comprising the program header information and the at least one retrieved section.

Claims (20)

1. A method of running a program, the method comprising, by computer equipment of a consuming party: retrieving a header file of a program file from a first transaction recorded on a blockchain maintained across a plurality of nodes of a blockchain network, the header file comprising: program header information, and reference information comprising one or more respective transaction identifiers (IDs) of one or more respective second transactions stored on the blockchain, wherein each respective one of the second transactions comprises a respective section of respective sections of a body of the program file, at least one respective section of the respective sections comprising runnable program code; from the blockchain, retrieving the respective section of the program file from at least one of the one or more respective second transactions based on the reference information; and running a program comprising the program header information and the at least one retrieved section.

2. The method of claim 1 , wherein said running of the program comprises: reconstructing a program file comprising said program from the header information and the at least one retrieved section, storing the reconstructed program file in memory of the computer equipment of the consuming party, and running the reconstructed program file on the computer equipment of the consuming party.

3. The method of claim 1 , wherein said reference information comprises a plurality of transaction IDs of a plurality of second transactions each storing a respective body section of the program file.

4. The method of claim 3 , wherein: said retrieving of the respective sections comprises retrieving, from the blockchain, the respective sections from two or more of the plurality of second transactions; and the program that is run comprises the program header information and the retrieved sections from the two or more second transactions.

5. The method of claim 1 , wherein: at least one of the body sections in at least one of the second transactions itself comprises a header portion comprising at least a reference to a third transaction containing a further body section; and the program that is run comprises the program header and the body sections from the second and third transactions.

6. The method of claim 1 , wherein the header file further comprises one or more conditions; and the method comprises evaluating the conditions, wherein the retrieval or the running of at least one of the sections of the program is conditional on an outcome of the evaluation.

7. The method of claim 6 , wherein the evaluation is performed by the computer equipment of the consuming party.

8. The method of claim 7 , wherein the header file comprises a runnable code stub for evaluating the one or more conditions, the method comprising running the code stub on the computer equipment of the consuming party in order to perform the evaluation.

9. The method of claim 6 , wherein the conditions comprise at least one access condition, being a condition on an identity of the consuming party; the evaluation comprising verifying that the identity of the consuming party matches an identity specified by the at least one access condition, wherein the retrieval or the running of at least one of the sections of the program is conditional on a positive outcome of the verification.

10. The method of claim 6 , wherein the conditions comprise at least one compatibility condition, being a condition on a compatibility of the computing equipment of the consuming party; the evaluation comprising checking that the computer equipment of the consuming party meets one or more technical criteria specified by the compatibility condition, wherein the retrieval or the running of at least one of the sections of the program is conditional on a positive outcome of the checking method step.

11. The method of claim 6 , wherein: said reference information comprises a plurality of transaction IDs of a plurality of second transactions each storing a respective body section of the program file; the conditions comprise a respective condition associated with each of the plurality of respective sections, at least some of the respective conditions being different to one another; and the method comprises evaluating the conditions associated with each of at least some of the plurality of sections, wherein the retrieval or running of each such section is conditional on the outcome of the evaluation.

12. The method of claim 11 , wherein the conditions comprise a respective access condition on an identity of the consuming party for each of some or all of the sections, the evaluation comprising verifying that the identity of the consuming party matches a respective identity specified by the respective condition for each respective section, wherein the retrieval or the running of the respective section is conditional on a positive outcome of the respective verification.

13. The method of claim 6 , wherein: wherein said reference information comprises a plurality of transaction IDs of a plurality of second transactions each storing a respective body section of the program file; and the conditions comprise a respective compatibility condition on a compatibility of the computer equipment of the consuming party with the respective section for each of some or all of the sections, the evaluation comprising verifying that the computer equipment of the consuming party meets a respective one or more technical criteria specified by the respective condition for each respective section, wherein the retrieval or the running of the respective section is conditional on a positive outcome of the respective check.

14. The method of claim 1 , wherein the program header information comprises one or more of: a version number of the program file, a version number of system upon which the program file is to be run, a size of the program file, a description, a list of reserved variables, a date and/or time stamp, a checksum, and/or ordering information for the body sections.

15. The method of claim 1 , wherein the blockchain and blockchain network are configured to operate according to an output-based model, wherein each transaction comprises at least one output and at least one input, each output comprising a locking script and each input comprising a pointer to an output of another transaction and an unlocking script for unlocking the locking script of the pointed-to output; wherein the locking and unlocking scripts are formulated in a scripting language, and wherein the header file and said program code is formulated in a language other than the scripting language.

16. The method of claim 15 , wherein each of the header file and the one or more sections is stored in at least one unspendable output of the respective first or second transaction on the blockchain.

17. The method of claim 15 or 16 , wherein said reference information in the header file comprises an identifier of an individual respective output within each second transaction, and the retrieval comprises retrieving each of the retrieved sections from the identified output.

18. The method of claim 1 , wherein the header file as stored in the first transaction is stored in encrypted form, encrypted based on a shared secret shared between the consuming party and a providing party who provides the program; and wherein the retrieval of the header file comprises decrypting the header file based on the shared secret.

19. A computer program embodied on computer-readable storage and configured so as when run on computer equipment of a consuming party to perform a method of: retrieving a header file from a first transaction recorded on a blockchain maintained across a plurality of nodes of a blockchain network, the header file comprising: program header information, and reference information comprising one or more respective transaction identifiers of one or more respective second transactions stored on the blockchain, wherein each respective one of the second transactions comprises a respective section of respective sections of a body of a program file, at least one respective section of the respective sections comprising runnable program code; from the blockchain, retrieving the respective section of the program file from at least one of the one or more respective second transactions based on the reference information; and running a first program comprising the program header information and the at least one retrieved section.

20. Equipment of a consuming party, comprising: memory comprising one or more memory units, and processing apparatus comprising one or more processing units; wherein the memory stores code arranged to run on the processing apparatus, the code being configured so as when run to perform a method of: retrieving a header file from a first transaction recorded on a blockchain maintained across a plurality of nodes of a blockchain network, the header file comprising: program header information, and reference information comprising one or more respective transaction identifiers of one or more respective second transactions stored on the blockchain, wherein each respective one of the second transactions comprises a respective section of respective sections of a body of a program file, at least one respective section of the respective sections comprising runnable program code; from the blockchain, retrieving the respective section of the program file from at least one of the one or more respective second transactions based on the reference information; and running a program comprising the program header information and the at least one retrieved section.

Assignments (2)
CHANGE OF NAME Recorded Aug 8, 2022
From: NCHAIN HOLDINGS LIMITED
To: NCHAIN LICENSING AG
Reel/Frame 061118/0671 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 10, 2022
From: WRIGHT, CRAIG STEVEN; DOIRON, BROCK
To: NCHAIN HOLDINGS LIMITED
Reel/Frame 059230/0512 →
Priority Claims (1)
GB 1913145 · Sep 12, 2019 · national
Continuity (1)
Related Publication 20220358189A1 · Nov 10, 2022
References Cited (65)
US 10698728B1 · Nelson · 2020 [cited by examiner]
US 10846416B2 · Uhr · 2020 [cited by examiner]
US 11201746B2 · Ranganathan · 2021 [cited by examiner]
US 11515999B1 · Nelson · 2022 [cited by examiner]
US 20180096349A1 · McDonald · 2018 [cited by examiner]
US 20190116024A1 · Wright et al. · 2019 [cited by applicant]
US 20190149337A1 · Savanah et al. · 2019 [cited by applicant]
US 20190199516A1 · Carver et al. · 2019 [cited by applicant]
US 20190392489A1 · Tietzen et al. · 2019 [cited by applicant]
US 20200195442A1 · Wright et al. · 2020 [cited by applicant]
US 20200266985A1 · Covaci et al. · 2020 [cited by applicant]
US 20200351235A1 · Shang · 2020 [cited by examiner]
US 20210233074A1 · Kramer et al. · 2021 [cited by applicant]
US 20220051236A1 · Wright · 2022 [cited by applicant]
US 20220261805A1 · Tartan et al. · 2022 [cited by applicant]
US 20220269810A1 · Tartan et al. · 2022 [cited by applicant]
US 20230185767A1 · Hung · 2023 [cited by examiner]
CN 109074565A · 2018 [cited by applicant]
CN 110692071A · 2020 [cited by applicant]
CN 111316595A · 2020 [cited by applicant]
CN 111316615A · 2020 [cited by applicant]
CN 110062034B · 2021 [cited by applicant]
JP 2019220148A · 2019 [cited by applicant]
JP 2020504930A · 2020 [cited by applicant]
KR 20190076197 · 2019 [cited by applicant]
KR 20190076197A · 2019 [cited by applicant]
WO 2009045257A1 · 2009 [cited by applicant]
WO 2017145006A1 · 2017 [cited by applicant]
WO 2017195160 · 2017 [cited by applicant]
WO 2017195160A1 · 2017 [cited by applicant]
WO 2019008531A1 · 2019 [cited by applicant]
WO 2019116248A1 · 2019 [cited by applicant]
WO 2020109907 · 2020 [cited by applicant]
WO 2020109907A1 · 2020 [cited by applicant]
WO 2020109908 · 2020 [cited by applicant]
WO 2020109908A1 · 2020 [cited by applicant]
WO 2020109909 · 2020 [cited by applicant]
WO 2020109909A1 · 2020 [cited by applicant]
WO 2020109910 · 2020 [cited by applicant]
WO 2020109910A1 · 2020 [cited by applicant]
WO 2020109911 · 2020 [cited by applicant]
WO 2020109911A1 · 2020 [cited by applicant]
WO 2020109912 · 2020 [cited by applicant]
WO 2020109912A1 · 2020 [cited by applicant]
WO 2020109913 · 2020 [cited by applicant]
WO 2020109913A1 · 2020 [cited by applicant]
WO 2020110025 · 2020 [cited by applicant]
WO 2020110025A1 · 2020 [cited by applicant]
WO 2020212796 · 2020 [cited by applicant]
WO 2020212796A1 · 2020 [cited by applicant]
WO 2021048663 · 2021 [cited by applicant]
WO 2021048663A1 · 2021 [cited by applicant]
WO WO2021119210A1 · 2021 [cited by examiner]
Donald E. Knuth, Structured Programming with go to Statements, Computing Surveys, Dec. 1974, pp. 261-301, vol. 6, No. 4, Stanford University, Stanford, California, US. [cited by applicant]
Andrew Sward et al., Data Insertion in Bitcoin's Blockchain, Mar. 4, 2018, pp. 2379-5980, URL: http://ledger.pitt.edu/ojs/ledger/article/view/101/93. [cited by applicant]
PCT/IB2020/057858, International Search Report and Written Opinion dated Nov. 6, 2020. [cited by applicant]
GB1913145.7 Search Report dated Mar. 16, 2020. [cited by applicant]
International Search Report and Written Opinion issued in International Application No. PCT/IB2020/057796, mailed on Nov. 10, 2020, 53 pages. [cited by applicant]
International Search Report and Written Opinion issued in International Application No. PCT/IB2020/057858, mailed on Nov. 6, 2020, 16 pages. [cited by applicant]
Knuth D. E., “Structured Programming with go to Statements,” Computing Surveys, Stanford University, Stanford, California, US, Dec. 1974, vol. 6, No. 4, 54 pages. [cited by applicant]
Search Report for the Application No. GB1913143.2 dated Jun. 1, 2020, 14 pages. [cited by applicant]
Search Report for the Application No. GB1913145.7 dated Mar. 16, 2020, 4 pages. [cited by applicant]
Sward A., et al., “Data Insertion in Bitcoin's Blockchain,” Mar. 4, 2018, ISSN 2379-5980, 23 pages Retrieved from Internet: URL: http://ledger.pitt.edu/ojs/ledger/article/view/101/93. [cited by applicant]
Wood G., “Ethereum: A Secure Decentralised Generalised Transaction Ledger Final Draft-Under Review,” Jun. 4, 2014, 32 pages, Retrieved from Internet: URL: http://gavwood.com/paper.pdf. [cited by applicant]
Gupta A., “Cloud Computing Security Using Blockchain,” Journal of Emerging Technologies and Innovative Research (JETIR), Jun. 2019, vol. 6(6), pp. 791-794. [cited by applicant]