├── .gitignore ├── README.md ├── blog ├── 2019-07-05-ckbscript-01.md ├── 2019-07-13-ckbscript-02.md ├── 2019-09-06-ckbscript-03.md ├── 2019-10-09-ckbscript-04.md ├── 2019-10-18-ckbscript-05.md ├── 2019-12-14-otx-01.md ├── 2019-12-24-rust-contract-01.md ├── 2020-01-06-otx-02.md ├── 2020-01-17-otx-03.md ├── 2020-02-03-ckbscript-06.md ├── 2020-02-21-ckbscript-07.md ├── 2020-03-02-animagus-01.md ├── 2020-03-03-ckbscript-08.md ├── 2020-03-06-animagus-02.md ├── 2020-03-14-otx-04.md ├── 2020-03-15-cache-js.md ├── 2020-03-16-kyper-scatter.md ├── 2020-03-19-ckbscript-09.md ├── 2020-03-20-godwoken-01.md ├── 2020-03-20-utxo-vs-account.md ├── 2020-04-09-ckbscript-10.md ├── 2020-04-11-diviner.md ├── 2020-05-18-GPC.md ├── 2020-05-30-kyper-intro.md ├── 2020-07-07-swappable-sign.md ├── 2020-12-19-multiHop-payment.md ├── 2021-01-04-otx-05.md └── 2030-01-01-guide.md ├── debug.log ├── docs ├── docs │ ├── HTTPRPC │ │ ├── interface-specification.md │ │ └── rpc-specification.md │ ├── awesome │ │ └── awesome-overview.md │ ├── ckb-cli.md │ ├── client │ │ ├── ckb-cli │ │ │ ├── ckb-cli-account.md │ │ │ ├── ckb-cli-dao.md │ │ │ ├── ckb-cli-mock-tx.md │ │ │ ├── ckb-cli-molecule.md │ │ │ ├── ckb-cli-overview.md │ │ │ ├── ckb-cli-rpc.md │ │ │ ├── ckb-cli-tx.md │ │ │ ├── ckb-cli-util.md │ │ │ └── ckb-cli-wallet.md │ │ ├── client-overview.md │ │ └── start │ │ │ ├── connect-client.md │ │ │ ├── download-client.md │ │ │ ├── start-dev.md │ │ │ ├── start-mainnet.md │ │ │ └── start-testnet.md │ ├── dapp │ │ └── dapp-overview.md │ ├── doc2.md │ ├── doc3.md │ ├── exchange │ │ ├── exchange-btc-address.md │ │ ├── exchange-ckb-address.md │ │ ├── exchange-eth-address.md │ │ └── exchange-overview.md │ ├── explorer │ │ └── explorer-overview.md │ ├── ide │ │ └── ide-ckb-studio.md │ ├── neuron │ │ └── neuron-overview.md │ ├── script │ │ ├── script-issue-udt.md │ │ ├── script-minimal.md │ │ ├── script-overview.md │ │ ├── script-stdlib.md │ │ ├── script-udt-instruction.md │ │ └── script-udt-transfer.md │ ├── sdk │ │ ├── sdk-java.md │ │ ├── sdk-javascript.md │ │ ├── sdk-overview.md │ │ ├── sdk-ruby.md │ │ └── sdk-swift.md │ ├── start-build-dev.md │ ├── start-deploy-script.md │ ├── testnet.md │ └── welcome │ │ ├── welcome-introduction.md │ │ ├── welcome-materials.md │ │ ├── welcome-programming-model.md │ │ ├── welcome-repositories.md │ │ ├── welcome-scripts.md │ │ └── welcome-structure.md ├── qa │ ├── ckb │ │ ├── about-cell.md │ │ ├── about-ckb.md │ │ ├── cell-ckb-vm.md │ │ └── ckb-solve-problems.md │ ├── contribute.md │ ├── course │ ├── explorer │ │ ├── about-explorer.md │ │ └── tokenview.md │ ├── grants │ │ ├── introduction.md │ │ ├── projects.md │ │ └── wishlist.md │ ├── layer2 │ │ └── about-muta.md │ ├── mine │ │ ├── about-mine-ckb.md │ │ ├── about-pow.md │ │ ├── mine-award.md │ │ └── pool-machine.md │ ├── nervos │ │ ├── about-nervos.md │ │ ├── compare-to-other.md │ │ └── nervos-innovations.md │ ├── nervosdao │ │ ├── about-dao.md │ │ ├── deposit-in-dao.md │ │ ├── revenue-of-dao.md │ │ └── rule-of-dao.md │ ├── wallet │ │ ├── about-neuron.md │ │ └── support-wallet.md │ └── welcome.md └── rfcs │ ├── 0001-positioning │ ├── 0001-positioning.md │ └── 0001-positioning.zh.md │ ├── 0002-ckb │ ├── 0002-ckb.md │ ├── 0002-ckb.zh.md │ └── images │ │ ├── .keep │ │ ├── layered-architecture.png │ │ ├── separation-of-generation-verification.png │ │ └── transaction-parallelism.png │ ├── 0003-ckb-vm │ ├── 0003-ckb-vm.md │ └── 0003-ckb-vm.zh.md │ ├── 0004-ckb-block-sync │ ├── 0004-ckb-block-sync.md │ ├── 0004-ckb-block-sync.zh.md │ └── images │ │ ├── 04-best-sent-header.jpg │ │ ├── 04-block-status.jpg │ │ ├── 04-connect-header-conditions.jpg │ │ ├── 04-connect-header-status.jpg │ │ ├── 04-locator.jpg │ │ ├── 04-seq-connect-headers.jpg │ │ ├── 04-sliding-window.jpg │ │ └── 04-status-tree.jpg │ ├── 0005-priviledged-mode │ ├── 0005-priviledged-mode.md │ └── 0005-priviledged-mode.zh.md │ ├── 0006-merkle-tree │ ├── 0006-merkle-tree.md │ └── 0006-merkle-tree.zh.md │ ├── 0007-scoring-system-and-network-security │ ├── 0007-scoring-system-and-network-security.md │ └── 0007-scoring-system-and-network-security.zh.md │ ├── 0008-serialization │ ├── 0008-serialization.md │ └── 0008-serialization.zh.md │ ├── 0009-vm-syscalls │ ├── 0009-vm-syscalls.md │ └── 0009-vm-syscalls.zh.md │ ├── 0010-eaglesong │ ├── 0010-eaglesong.md │ ├── 0010-eaglesong.zh.md │ ├── 0010-eaglesong.zh(需要相关的技术背景才能翻译好,暂留不发布).md │ ├── CompactFIPS202.py │ ├── constants.py │ ├── eaglesong.c │ ├── eaglesong.py │ ├── hash.c │ └── hash.py │ ├── 0011-transaction-filter-protocol │ ├── 0011-transaction-filter-protocol.md │ └── 0011-transaction-filter-protocol.zh.md │ ├── 0012-node-discovery │ ├── 0012-node-discovery.md │ ├── 0012-node-discovery.zh.md │ └── images │ │ ├── announce-nodes.png │ │ ├── bootstrap.png │ │ └── get-nodes.png │ ├── 0013-get-block-template │ ├── 0013-get-block-template.md │ └── 0013-get-block-template.zh.md │ ├── 0014-vm-cycle-limits │ ├── 0014-vm-cycle-limits.md │ └── 0014-vm-cycle-limits.zh.md │ ├── 0015-ckb-cryptoeconomics │ ├── 0015-ckb-cryptoeconomics.md │ ├── 0015-ckb-cryptoeconomics.zh.md │ └── images │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ ├── 05.png │ │ ├── 06.png │ │ ├── 07.png │ │ ├── 08.png │ │ ├── 09.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 18.png │ │ ├── 19.png │ │ ├── 20.png │ │ ├── 21.png │ │ ├── 22.png │ │ ├── 23.png │ │ ├── 24.png │ │ ├── 25.png │ │ ├── 26.png │ │ ├── 27.png │ │ ├── 28.png │ │ ├── 29.png │ │ ├── 30.png │ │ ├── 31.png │ │ ├── 32.png │ │ ├── 33.png │ │ ├── 34.png │ │ ├── 35.png │ │ ├── 36.png │ │ ├── 37.png │ │ ├── 38.png │ │ ├── 39.png │ │ ├── 40.png │ │ ├── 41.png │ │ ├── 42.png │ │ ├── 43.png │ │ ├── 44.png │ │ ├── 45.png │ │ ├── 46.png │ │ ├── 47.png │ │ ├── 48.png │ │ ├── 49.png │ │ ├── 50.png │ │ ├── 51.png │ │ ├── 52.png │ │ ├── 53.png │ │ ├── 54.png │ │ └── 55.png │ ├── 0017-tx-valid-since │ ├── 0017-tx-valid-since.md │ └── 0017-tx-valid-since.zh.md │ ├── 0019-data-structures │ ├── 0019-data-structures.md │ └── 0019-data-structures.zh.md │ ├── 0020-ckb-consensus-protocol │ ├── 0020-ckb-consensus-protocol.md │ ├── 0020-ckb-consensus-protocol.zh.md │ └── images │ │ ├── 1559064108898.png │ │ ├── 1559064685714.png │ │ ├── 1559064934639.png │ │ ├── 1559064995366.png │ │ ├── 1559065017925.png │ │ ├── 1559065197341.png │ │ ├── 1559065416713.png │ │ ├── 1559065517956.png │ │ ├── 1559065670251.png │ │ ├── 1559065968791.png │ │ ├── 1559065997745.png │ │ ├── 1559066101731.png │ │ ├── 1559066131427.png │ │ ├── 1559066158164.png │ │ ├── 1559066233715.png │ │ ├── 1559066249700.png │ │ ├── 1559066329440.png │ │ ├── 1559066373372.png │ │ ├── 1559066526598.png │ │ ├── 1559068235154.png │ │ └── 1559068266162.png │ ├── 0021-ckb-address-format │ ├── 0021-ckb-address-format.md │ ├── 0021-ckb-address-format.zh.md │ └── images │ │ └── ckb-address.png │ ├── 0022-transaction-structure │ ├── 0022-transaction-structure.md │ ├── 0022-transaction-structure.zh.md │ ├── cell-data.png │ ├── cell-dep-structure.png │ ├── cell-deps.png │ ├── code-locating-via-type.png │ ├── code-locating.png │ ├── dep-group-expansion.png │ ├── group-input.png │ ├── header-deps.png │ ├── lock-script-cont.png │ ├── lock-script-grouping.png │ ├── lock-script.png │ ├── older-block-and-transaction.png │ ├── out-point.png │ ├── outputs-data.png │ ├── script-p2.png │ ├── script.png │ ├── transaction-overview.png │ ├── transaction-p1.png │ ├── transaction-p2.png │ ├── type-id-group.png │ ├── type-id-recursive-dependency.png │ ├── type-id.png │ ├── type-script-grouping.png │ └── value-storage.png │ ├── 0023-dao-deposit-withdraw │ ├── 0023-dao-deposit-withdraw.md │ └── 0023-dao-deposit-withdraw.zh.md │ ├── 0024-ckb-system-script-list │ ├── 0024-ckb-system-script-list.md │ └── 0024-ckb-system-script-list.zh.md │ ├── 0025-simple-udt │ ├── 0025-simple-udt.md │ └── 0025-simple-udt.zh.md │ ├── 0026-anyone-can-pay │ ├── 0026-anyone-can-pay.md │ └── 0026-anyone-can-pay.zh.md │ ├── introduction.md │ └── introduction.zh.md ├── docusaurus.config.js ├── package.json ├── sidebars.js ├── src ├── css │ └── custom.css ├── pages │ ├── index.js │ └── styles.module.css └── theme │ ├── BlogListPage │ └── index.js │ ├── BlogPostItem │ ├── index.js │ └── styles.module.css │ ├── BlogPostPage │ └── index.js │ ├── BlogTagsListPage │ └── index.js │ ├── BlogTagsPostsPage │ └── index.js │ └── CodeBlock │ ├── index.js │ └── styles.module.css ├── static └── img │ ├── blog │ ├── GPC-1.png │ ├── GPC-2.png │ ├── GPC-3.png │ ├── GPC-4.png │ ├── GPC-5.png │ ├── GPC-6.png │ ├── animagus-01-1.png │ ├── animagus-01-2.png │ ├── animagus-01-3.png │ ├── animagus-01-4.png │ ├── animagus-01-5.png │ ├── animagus-01-6.png │ ├── animagus-01-7.png │ ├── animagus-02-1.png │ ├── animagus-02-2.png │ ├── bitcoin-sighash.png │ ├── godwoken-01-1.jpg │ ├── godwoken-01-2.jpg │ ├── godwoken-01-3.jpg │ ├── godwoken-01-4.jpg │ ├── keyper-intro-1.png │ ├── keyper-intro-2.png │ ├── kyper-scatter-1.png │ ├── kyper-scatter-2.png │ ├── otx-02.png │ ├── otx-03-1.png │ ├── otx-03-2.png │ ├── otx-03-3.png │ ├── otx-03-4.png │ ├── otx-03-5.png │ ├── otx-04-1.png │ ├── otx-04-2.png │ ├── tx.svg │ ├── utxo-vs-account-1.svg │ ├── utxo-vs-account-2.svg │ ├── utxo-vs-account-3.svg │ └── utxo-vs-account-4.svg │ ├── ckb │ ├── bitcoin-state.png │ ├── bitcoin-utxo.png │ ├── cell-tx.png │ ├── ckb-state.png │ ├── eth-state.png │ ├── eth-storage-growth.png │ └── state-generation.png │ ├── ditto.png │ ├── ditto1.png │ ├── ditto2.png │ ├── ditto3.png │ ├── docs │ ├── ckb-structure.png │ ├── explorer │ │ ├── block-info.png │ │ ├── block1.png │ │ ├── block2.png │ │ ├── charts.png │ │ ├── dao-info.png │ │ ├── dao-info2.png │ │ ├── explorer-info.png │ │ ├── face.png │ │ ├── navigation.png │ │ ├── nervosdao1.png │ │ ├── nervosdao2.png │ │ └── tx-info.png │ ├── mine │ │ ├── mine-3.png │ │ ├── mine-4.png │ │ ├── mine-5.png │ │ ├── mine-88877.png │ │ └── mine-88888.png │ ├── model-script.png │ ├── model-transaction.png │ └── tui.png │ ├── favicon.ico │ ├── logo.svg │ ├── rfcs │ ├── 0002 │ │ ├── layered-architecture.png │ │ ├── separation-of-generation-verification.png │ │ └── transaction-parallelism.png │ ├── 0004 │ │ ├── best-sent-header.jpg │ │ ├── block-status.jpg │ │ ├── connect-header-conditions.jpg │ │ ├── connect-header-status.jpg │ │ ├── locator.jpg │ │ ├── seq-connect-headers.jpg │ │ ├── sliding-window.jpg │ │ └── status-tree.jpg │ ├── 0012 │ │ ├── announce-nodes.png │ │ ├── bootstrap.png │ │ └── get-nodes.png │ ├── 0020 │ │ ├── 1559064108898.png │ │ ├── 1559064685714.png │ │ ├── 1559064934639.png │ │ ├── 1559064995366.png │ │ ├── 1559065017925.png │ │ ├── 1559065197341.png │ │ ├── 1559065416713.png │ │ ├── 1559065517956.png │ │ ├── 1559065670251.png │ │ ├── 1559065968791.png │ │ ├── 1559065997745.png │ │ ├── 1559066101731.png │ │ ├── 1559066131427.png │ │ ├── 1559066158164.png │ │ ├── 1559066233715.png │ │ ├── 1559066249700.png │ │ ├── 1559066329440.png │ │ ├── 1559066373372.png │ │ ├── 1559066526598.png │ │ ├── 1559068235154.png │ │ └── 1559068266162.png │ ├── 0021 │ │ └── ckb-address.png │ └── 0022 │ │ ├── cell-data.png │ │ ├── cell-dep-structure.png │ │ ├── cell-deps.png │ │ ├── code-locating-via-type.png │ │ ├── code-locating.png │ │ ├── dep-group-expansion.png │ │ ├── group-input.png │ │ ├── header-deps.png │ │ ├── lock-script-cont.png │ │ ├── lock-script-grouping.png │ │ ├── lock-script.png │ │ ├── older-block-and-transaction.png │ │ ├── out-point.png │ │ ├── outputs-data.png │ │ ├── script-p2.png │ │ ├── script.png │ │ ├── transaction-overview.png │ │ ├── transaction-p1.png │ │ ├── transaction-p2.png │ │ ├── type-id-group.png │ │ ├── type-id-recursive-dependency.png │ │ ├── type-id.png │ │ ├── type-script-grouping.png │ │ └── value-storage.png │ ├── undraw_docusaurus_mountain.svg │ ├── undraw_docusaurus_react.svg │ └── undraw_docusaurus_tree.svg └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Website 2 | 3 | This website is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern static website generator. 4 | 5 | ### Installation 6 | 7 | ``` 8 | $ yarn 9 | ``` 10 | 11 | ### Local Development 12 | 13 | ``` 14 | $ yarn start 15 | ``` 16 | 17 | This command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server. 18 | 19 | ### Build 20 | 21 | ``` 22 | $ yarn build 23 | ``` 24 | 25 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 26 | 27 | ### Deployment 28 | 29 | ``` 30 | $ GIT_USER= USE_SSH=true yarn deploy 31 | ``` 32 | 33 | If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. 34 | 35 | Now this site will be auto deployed to [https://docs.ckb.dev](https://docs.ckb.dev) when new pushes are detected. 36 | 37 | ### Note 38 | 39 | ``` 40 | yarn swizzle @docusaurus/theme-classic BlogListPage 41 | yarn swizzle @docusaurus/theme-classic BlogPostItem 42 | yarn swizzle @docusaurus/theme-classic BlogPostPage 43 | yarn swizzle @docusaurus/theme-classic BlogTagsListPage 44 | yarn swizzle @docusaurus/theme-classic BlogTagsPostsPage 45 | 46 | yarn swizzle @docusaurus/theme-classic CodeBlock 47 | ``` 48 | -------------------------------------------------------------------------------- /blog/2019-07-05-ckbscript-01.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: ckbscript-01 3 | sidebar_label: blog 4 | title: "CKB 脚本编程简介[1]: 验证模型" 5 | author: Xuejie Xiao 6 | author_title: Nervos Core Team 7 | author_url: https://github.com/xxuejie 8 | author_image_url: https://avatars3.githubusercontent.com/u/340446?s=400&v=4 9 | tags: [Script_Programming, xuejie,] 10 | --- 11 | 12 | 截至目前,CKB 中的 Cell 验证模型或多或少已经趋于稳定,因此我将在这里开始写一系列文章来介绍 CKB 脚本编程。我的目标是补充在阅读白皮书后编写 CKB 脚本所需的所有缺失的细节实现,这样你就可以开始探索 CKB 呈现的这个美丽的仙境。 13 | 14 | 15 | 16 | 你可能会注意到我将在 CKB 上运行的代码称为`脚本`,而不是`智能合约`。这是因为智能合约对我来说是一个令人困惑的术语,我在这里想用另一个词来表示 CKB 独特的可编程性。CKB 中的脚本不一定只是我们在脚本语言中看到的脚本,例如 Ruby,JS,它实际上是指在 CKB VM 上运行的 RISC-V 格式的二进制文件。 17 | 18 | 这第一篇文章将专门介绍 CKB v0.14.0 中引入的[全新验证模型](https://github.com/nervosnetwork/ckb/pull/913)。这可能听起来很无聊,但我保证这是最后一篇没有实际例子的帖子 :P 19 | 20 | 请注意,尽管我认为 CKB 的编程模型现在非常稳定,但目前仍然在进行开发,因此可能会有变化。我将尽力确保本文始终处于最新的状态,但是如果在过程到任何疑惑,本文以 CKB 的主网 Lina 版本作为依据。 21 | 22 | ## 概述 23 | 24 | 下面一张图片说明了 CKB 的真实交易过程: 25 | 26 | ![Transaction Example](/img/blog/tx.svg) 27 | 28 | 这张图中有很多内容,我们将在稍后的文章中再次回到此图。今天,我们将只关注单元数据结构中的2个实体:`lock`和`type`。 29 | 30 | ```rust 31 | pub struct CellOutput { 32 | pub capacity: Capacity, 33 | pub lock: Script, 34 | #[serde(rename = "type")] 35 | pub type_: Option