├── jp ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ ├── datatypes.md │ ├── lessonoverview.md │ ├── contracts.md │ ├── functions.md │ ├── arrays.md │ └── functions2.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── template.md │ ├── 00-overview.md │ └── 1-overview.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md ├── 4 │ ├── lessoncomplete.md │ ├── 00-overview.md │ └── wrappingitup.md ├── 5 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ └── 14-wrappingitup.md ├── 6 │ ├── lessoncomplete.md │ └── 00-overview.md └── share-template-msgs.json ├── ko ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── datatypes.md │ ├── structs.md │ ├── lessonoverview.md │ ├── contracts.md │ ├── functions.md │ └── arrays.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ ├── template.md │ └── 1-overview.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md ├── 4 │ ├── lessoncomplete.md │ ├── 00-overview.md │ └── wrappingitup.md ├── 5 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ └── 14-wrappingitup.md ├── 6 │ ├── lessoncomplete.md │ └── 00-overview.md └── share-template-msgs.json ├── zh ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── lessonoverview.md │ ├── math.md │ ├── contracts.md │ ├── datatypes.md │ ├── structs.md │ ├── functions.md │ ├── arrays.md │ └── functions2.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ ├── template.md │ ├── 1-overview.md │ └── 14-wrappingitup.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md ├── 4 │ ├── lessoncomplete.md │ ├── 00-overview.md │ └── wrappingitup.md ├── 5 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ └── 14-wrappingitup.md ├── 6 │ ├── lessoncomplete.md │ └── 00-overview.md ├── lander.yml └── share-template-msgs.json ├── ru ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ ├── datatypes.md │ └── contracts.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── template.md │ ├── 00-overview.md │ └── 1-overview.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md ├── 4 │ ├── lessoncomplete.md │ ├── 00-overview.md │ └── wrappingitup.md └── share-template-msgs.json ├── en ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ ├── datatypes.md │ └── contracts.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── template.md │ ├── 00-overview.md │ └── 1-overview.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md ├── 4 │ ├── lessoncomplete.md │ ├── 00-overview.md │ └── wrappingitup.md ├── 5 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ └── 14-wrappingitup.md ├── 6 │ ├── lessoncomplete.md │ └── 00-overview.md └── share-template-msgs.json ├── th ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ ├── datatypes.md │ └── contracts.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── template.md │ ├── 00-overview.md │ └── 1-overview.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md ├── 4 │ ├── lessoncomplete.md │ ├── 00-overview.md │ ├── wrappingitup.md │ └── 13-battlearena.md ├── 5 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ └── 14-wrappingitup.md └── share-template-msgs.json ├── es ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ └── datatypes.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── template.md │ ├── 00-overview.md │ └── 1-overview.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md ├── 4 │ ├── lessoncomplete.md │ ├── 00-overview.md │ └── wrappingitup.md ├── 5 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ └── 14-wrappingitup.md ├── 6 │ ├── lessoncomplete.md │ └── 00-overview.md └── share-template-msgs.json ├── fr ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ ├── datatypes.md │ └── contracts.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── template.md │ ├── 00-overview.md │ └── 1-overview.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md ├── 4 │ ├── lessoncomplete.md │ ├── 00-overview.md │ └── wrappingitup.md ├── 5 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ └── 14-wrappingitup.md ├── 6 │ ├── lessoncomplete.md │ └── 00-overview.md └── share-template-msgs.json ├── no ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ ├── datatypes.md │ └── contracts.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── template.md │ ├── 00-overview.md │ └── 1-overview.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md └── share-template-msgs.json ├── pt ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ ├── datatypes.md │ └── contracts.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── template.md │ ├── 00-overview.md │ └── 1-overview.md ├── 3 │ ├── 14-lessoncomplete.md │ ├── 00-overview.md │ └── 13-wrappingitup.md ├── 4 │ ├── lessoncomplete.md │ ├── 00-overview.md │ └── wrappingitup.md ├── 5 │ ├── 15-lessoncomplete.md │ ├── 00-overview.md │ └── 14-wrappingitup.md ├── 6 │ ├── lessoncomplete.md │ └── 00-overview.md └── share-template-msgs.json ├── tr ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ ├── datatypes.md │ └── contracts.md ├── 2 │ ├── 15-lessoncomplete.md │ ├── template.md │ ├── 00-overview.md │ └── 1-overview.md └── share-template-msgs.json ├── .gitignore ├── .github └── pull_request_template.md ├── license ├── index.ts ├── pl ├── 1 │ ├── 00-overview.md │ ├── lessoncomplete.md │ ├── math.md │ ├── structs.md │ ├── datatypes.md │ └── contracts.md └── share-template-msgs.json ├── crowdin.yml └── README.md /jp/6/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: レッスン6終了! 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /jp/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: レッスン 3 終了! 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /jp/4/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson4終了! 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /jp/5/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: レッスン5終了! 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /jp/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: レッスン 2 終了! 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /ko/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 레슨 3 완료! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /ko/4/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 레슨 4 완료! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /ko/5/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 레슨 5 완료! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /ko/6/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 레슨 6 완료! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /zh/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 第三课完成了! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /zh/5/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 第五课结束! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /ko/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 레슨 2 완료! 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /ru/4/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Урок 4 завершен! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /zh/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 第二课完成了! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /en/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 3 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /en/4/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 4 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /en/5/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 5 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /en/6/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 6 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /th/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 3 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /th/4/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 4 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /th/5/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 5 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /zh/4/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 4 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /zh/6/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 6 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /en/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 2 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /es/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ¡Lección 3 Completada! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /es/4/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ¡Lección 4 completada! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /es/5/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lección 5 Completada! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /es/6/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ¡Lección 6 completada! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /fr/4/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leçon 4 terminée ! 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /fr/6/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leçon 6 terminée ! 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /no/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leksjon 2 ferdig! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /no/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leksjon 3 Fullført! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /pt/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lição 3 Completa! 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /pt/4/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lição 4 Completa! 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /pt/6/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lição 6 Completa! 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /ru/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Урок 3 завершен! 3 | actions: ['Проверить', 'Подсказать'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /th/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 2 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /es/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ¡Lección 2 Completada! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /fr/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leçon 2 terminée ! 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /fr/3/14-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leçon 3 terminée ! 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /fr/5/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 5 terminée ! 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /pt/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lição 2 Completa! 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /pt/5/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 5 Completa! 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | -------------------------------------------------------------------------------- /ru/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Урок 2 завершен! 3 | actions: ['Проверить', 'Подсказать'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /tr/2/15-lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ders 2 Tamamlandı! 3 | actions: ['cevapKontrol', 'ipuçları'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | vendor 2 | .bundle/ 3 | .DS_Store 4 | Thumbs.db 5 | db.json 6 | *.log 7 | node_modules/ 8 | public/ 9 | .deploy*/ 10 | build/ 11 | .tmp 12 | .idea/ 13 | /.vs/ -------------------------------------------------------------------------------- /zh/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 僵尸攻击人类 3 | header: 你成功晋升到第二课啦! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | 厉害了,我的人类! 你比我设想的更会编程! 8 | 第二课中,你会学到如何通过猎食其他生物,扩张你的僵尸军团 9 | 在这一课里,我们会使用到一些高级的 Solidity 概念,所以你一定要先完成第一课。 10 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | - [ ] I did these translations myself and own copyright for them 2 | - [ ] I didn't use a machine to do these translations 3 | - [ ] I assign all copyright to Loom Network for these translations 4 | -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | Copyright Loom Network 2018. All rights reserved. 2 | 3 | Contributors must assign copyright back to Loom Network for any contributions they make. 4 | Loom Network retains ownership of any derivative work created from original content. -------------------------------------------------------------------------------- /zh/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 搭建僵尸工厂 3 | header: 人类,欢迎你 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | 你认为你可以当一个合格的 **CryptoZombie**, 嗯? 8 | 9 | 这个教程会教你如何搭建一个**以太网的游戏**。 10 | 11 | 此课程为 Solidity 初学者设计,需要你对其他的程序语言有所了解(如 JavaScript)。 12 | -------------------------------------------------------------------------------- /zh/lander.yml: -------------------------------------------------------------------------------- 1 | --- 2 | zh: 3 | ogdescription: CryptoZombies 是个在编游戏的过程中学习 Solidity 智能协议语言的互动教程。 4 | ogtitle: CryptoZombies - 编游戏的同时学习以太坊的智能协议. Loom Network 产品。 5 | telegram_open_chat: Open Chat 6 | telegram_link: https://t.me/loomnetworkCN -------------------------------------------------------------------------------- /zh/4/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 僵尸作战系统 3 | header: "Lesson 4: 僵尸作战系统" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | 这一刻终于来了, 人类…… 8 | 9 | 是时候让你的僵尸战斗了! 10 | 11 | 不过僵尸大战并不适合胆小的人…… 12 | 13 | 在这一课, 我们将综合利用在前面课程中学到的许多知识,创建一个僵尸作战系统。 我们也将学习 `payable` 函数,学习如何开发可以接收其他玩家付款的DApp。 14 | -------------------------------------------------------------------------------- /zh/5/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ERC721 标准和加密收藏品 3 | header: "Lesson 5: ERC721 标准和加密收藏品" 4 | roadmap: roadmap5.jpg 5 | --- 6 | 7 | 呼,游戏变得越来越刺激啦... 8 | 9 | 在这一课,我们将接触到一些更高级的东西。 10 | 11 | 我们将讨论 **代币**, **ERC721** 标准, 以及 **加密收集资产**. 12 | 13 | 换句话说,我们将 **让你可以和你的朋友交易僵尸!** 14 | -------------------------------------------------------------------------------- /ko/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 좀비 공장 만들기 3 | header: 환영한다, 인간이여! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | 그러니까 자네가 **크립토 좀비**가 되기 위한 자질을 갖추었다고 생각한단 말이지? 8 | 9 | 이 코스는 **이더리움 게임을 만드는** 방법을 가르쳐 줄 걸세. 10 | 11 | 이 코스는 솔리디티 초보자를 위해 설계되었지만 학습자가 자바스크립트 같은 언어로 프로그래밍한 경험이 있다고 가정하지. 12 | -------------------------------------------------------------------------------- /jp/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ゾンビファクトリーの作成 3 | header: よく来たな、人間よ! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | さて、それじゃあ**CryptoZombie**を始める準備はできたってことだな? 8 | 9 | このコースでは**イーサリアム上でゲームを作成する方法**を君たちに教える。 10 | 11 | Solidityの初心者でもわかるように教えていくつもりだが、別の言語(例:JavaScript)である程度経験があることを前提に進めるから、その辺りはよろしく頼むぞ。 12 | -------------------------------------------------------------------------------- /jp/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: データ型 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | Solidityのコードはコントラクト内にカプセル化されている。コントラクトは基本的には... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # それではテストだ 19 | 20 | -------------------------------------------------------------------------------- /jp/5/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ERC721とクリプト収集物 3 | header: "レッスン5: ERC721とクリプト収集物" 4 | roadmap: roadmap5.jpg 5 | --- 6 | 7 | このチュートリアルもかなり熱くなってきたな・・・すごい! 8 | 9 | 今回のレッスンは少し高度になるぞ。 10 | 11 | これから **トークン**、 **ERC721** 規格、そして **収集可能なクリプト資産** について説明していく。 12 | 13 | つまり、このレッスンでは **お主のゾンビを友達とトレードできるようにする** からな! 14 | -------------------------------------------------------------------------------- /ko/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 좀비가 희생물을 공격하다 3 | header: 그러니까 자네가 레슨 2에 왔다는 거군! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | 훌륭하다, 인간이여! 자네, 내가 생각했던 것보다 코딩을 잘하는군. 8 | 9 | 레슨 2는 **좀비에게 다른 생명체를 먹여서 좀비 군대의 규모를 늘리는 방법을** 자네에게 가르쳐 줄 걸세. 10 | 11 | 이 레슨에서 몇 가지 고급 솔리디티 개념에 대해 다룰 것이니, 시작하기 전에 레슨 1을 완료하는 걸 강력 추천하네. 12 | -------------------------------------------------------------------------------- /jp/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ゾンビが人間を襲う 3 | header: レッスン 2までよくぞたどり着いた! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | おお、人間よ!お前は私が思っていたよりもコードがよくできるようだな。 8 | 9 | このレッスン 2では、**人間に噛み付いてゾンビ軍団を倍増させる方法を教えてやるが、怖がらずにしっかり学ぶのだ**。 10 | 11 | このレッスンで、ちょっと難し目のSolidityのコンセプトを説明していくから、レッスン 1を終了していないとさっぱりわからなくなるぞ。しっかりやっておくようにな。 12 | 13 | -------------------------------------------------------------------------------- /th/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: มาสร้างโรงงานซอมบี้กัน 3 | header: Welcome, human! 4 | roadmap: roadmap.jpg 5 | --- 6 | ในบทเรียนนี้จะสอนเกี่ยวกับการสร้างเกมบน Ethereum โดยแพลตฟอร์มนี้ถูกออกแบบขึ้นสำหรับผู้ใช้ Solidity มือใหม่ แต่อย่างไรก็ตามผู้ใช้จะต้องมีประสบการณ์ด้านการเขียนโปรแกรมอื่นๆ มาแล้วด้วยบ้าง (e.g. Javascript) 7 | 8 | -------------------------------------------------------------------------------- /jp/4/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ゾンビのバトルシステム 3 | header: "レッスン4:ゾンビのバトルシステム" 4 | roadmap: roadmap4.jpg 5 | --- 6 | 7 | 人間よ、その時がやってきた・・・ 8 | 9 | お主のゾンビたちを闘わせるのだ! 10 | 11 | だがな、ゾンビの闘いは気弱な奴には向いていない・・・ 12 | 13 | このレッスンでは、前のチャプターでお主が学んだたくさんのコンセプトを組み合わせながら、ゾンビバトルの機能を作り上げていくのだ。 **payable** 関数と、プレイヤーから金銭を受け取れるDAppsの作り方も教えていくからな。 14 | -------------------------------------------------------------------------------- /zh/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 数据类型 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | Solidity 代码封装在一种叫“合约(contracts)”的数据结构中。 12 | 13 | 合约看起来是这样的... 14 | 15 | ``` 16 | contract HelloWorld 17 | 18 | ``` 19 | 20 | # 实战演习 21 | 22 | -------------------------------------------------------------------------------- /ko/5/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ERC721 & 크립토 수집품 3 | header: "레슨 5: ERC721 & 크립토 수집품" 4 | roadmap: roadmap5.jpg 5 | --- 6 | 7 | 후! 이제 점점 더 달아오르기 시작하는군... 8 | 9 | 이번 레슨에서는, 조금 더 심화된 내용을 보게 될 것이네. 10 | 11 | 우리는 **토큰**, **ERC721** 표준, 그리고 **크립토 수집품 자산(Crypto-collible assets)**에 대해 살펴볼 걸세. 12 | 13 | 즉, **자네의 좀비를 자네 친구와 거래할 수 있게** 할 것이네. 14 | -------------------------------------------------------------------------------- /en/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Data Types 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | Solidity's code is encapsulated in contracts. A contract is basically... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # Put it to the test 19 | 20 | -------------------------------------------------------------------------------- /ko/4/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 좀비 전투 시스템 3 | header: "레슨 4: 좀비 전투 시스템" 4 | roadmap: roadmap4.jpg 5 | --- 6 | 7 | 때가 왔다, 인간이여... 8 | 9 | 자네의 좀비가 싸.우.게. 만들 때 말이네! 10 | 11 | 하지만 좀비 전투는 심약한 인간들을 위한 것은 아니야... 12 | 13 | 이번 레슨에서, 우린 좀비 전투 함수를 만들기 위해 이전 챕터들에서 자네가 지금껏 배워온 것들을 한데 모으게 될 것이네. 우린 또한 **payable** 함수와 DApp이 플레이어들로부터 돈을 받을 수 있게 하는 방법에 대해 배우게 될 게야. 14 | -------------------------------------------------------------------------------- /no/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Data Typer 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | Solidity's koden er innkapslet i kontrakter. En kontrakt er i utgangspunktet ... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # Test det 19 | 20 | -------------------------------------------------------------------------------- /ru/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Типы данных 3 | actions: ['Проверить', 'Подсказать'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | Код в Solidity помещают внутри **контрактов**. `contract` — это просто... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # Проверь себя 19 | 20 | -------------------------------------------------------------------------------- /tr/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Veri Türleri 3 | actions: ['cevapKontrol', 'ipuçları'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | Solidity'nin kodu kontratlarda kapsüllenmiştir. Bir kontrat temel olarak... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # Teste koy 19 | 20 | -------------------------------------------------------------------------------- /fr/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Types de données 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | Le code Solidity est encapsulé dans des contrats. Un exemple de contrat... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # A votre tour 19 | -------------------------------------------------------------------------------- /pt/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Tipos de Dados 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | O código Solidity é encapsulado em contratos. Um contrato é basicamente... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # Vamos testar 19 | 20 | -------------------------------------------------------------------------------- /th/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Data Types 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | โค้ดใน Solidity นั้นถูกบรรจุไว้ใน contract โดยหน้าตาของ contract โดยทั่วไปแล้วก็คือ... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # มาทดสอบกัน 19 | 20 | -------------------------------------------------------------------------------- /es/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Tipo de Datos 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | El código de Solidity está encapsulado en contratos. Un contrato es básicamente... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # Vamos a probarlo 19 | 20 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import en from './en' 2 | import zh from './zh' 3 | import pt from './pt' 4 | import jp from './jp' 5 | import th from './th' 6 | import fr from './fr' 7 | import ru from './ru' 8 | import es from './es' 9 | 10 | export default { 11 | en, // English (source for all translations) 12 | zh, 13 | pt, 14 | jp, 15 | th, 16 | fr, 17 | ru, 18 | es 19 | } 20 | -------------------------------------------------------------------------------- /ko/2/template.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 자료 형 Data Types 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | answer: > 9 | --- 10 | 11 | 솔리디티 코드는 컨트렉트에 싸여 있지. 컨트렉트는 기본적으로... Solidity's code is encapsulated in contracts. A contract is basically... 12 | 13 | ``` 14 | contract HelloWorld 15 | 16 | ``` 17 | 18 | # 직접 해보기 19 | -------------------------------------------------------------------------------- /ru/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Фабрика Зомби 3 | header: Смелей, человек! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | Всё ли у тебя есть для того, чтобы стать **КриптоЗомби**? 8 | 9 | На этом курсе ты научишься, как **создать игру на Ethereum**. 10 | 11 | Курс для новичков в Ethereum, но надеемся, что у тебя есть опыт программирования на других языках (например, на Javascript). 12 | -------------------------------------------------------------------------------- /zh/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 高级 Solidity 理论 3 | header: "Lesson 3: 高级 Solidity 理论" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | 诶呦喂……少年!你比我想象的厉害。你的 Solidity 技能好棒。 8 | 9 | 既然你已经有了些 Solidity 编程经验,我们就要提高难度,讲讲 Ethereum 开发的技术细节。 10 | 11 | 这堂课比之前要少些特效(没有钱了……)但是你会学一些非常重要的基础理论,编写真正的 DApp 时必知的:**智能协议的所有权,Gas的花费,代码优化,和代码安全**。 12 | 13 | 别怪我没提醒你哦!这节课没有特效! 14 | 15 | 只有高密度的知识等待你去消化。我们建议你完成第二教程之后再来。 16 | -------------------------------------------------------------------------------- /ru/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Зомби идут в атаку! 3 | header: Поздравляем, перед тобой Урок 2! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | Потрясающе, человек! Ты пишешь код лучше, чем мы думали. 8 | 9 | В Уроке 2 ты научишься, как **увеличить армию зомби, питаясь иными формами жизни**. 10 | 11 | В этом разделе мы освоим более продвинутые концепции Solidity, поэтому рекомендуем полностью завершить Урок 1. 12 | -------------------------------------------------------------------------------- /en/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Making the Zombie Factory 3 | header: Welcome, human! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | So you think you have what it takes to become a **CryptoZombie**, huh? 8 | 9 | This course will teach you how to **build a game on Ethereum**. 10 | 11 | It's designed for beginners to Solidity, but it assumes you have some experience 12 | programming in another language (e.g. Javascript). 13 | -------------------------------------------------------------------------------- /pl/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Stworzenie Zombie Factory 3 | header: Witaj, człowieku! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | Myślisz, że masz wszystko co potrzeba, aby stać się **CryptoZombie**, huh? 8 | 9 | Ten kurs nauczy Cię jak **zbudować grę na Ethereum**. 10 | 11 | Jest zaprojektowany z myślą o początkujących w Solidity. Zakłada jednak, że masz 12 | jakieś programistyczne doświadczenie (np. w Javascript). 13 | -------------------------------------------------------------------------------- /th/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ให้ซอมบี้ออกล่าเหยื่อ 3 | header: คุณก็ได้มาถึงบทเรียนที่ 2 แล้ว! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | น่าทึ่งมาก ! คุณเก่งกว่าที่เรานึกไว้เสียอีก 8 | 9 | ในบทเรียนที่ 2 เราจะเรียนเกี่ยวกับการ **เพิ่มจำนวนซอมบี้ในกองทัพของคุณโดยการกินสิ่งมีชีวิตอื่นเข้าไป** 10 | 11 | บทเรียนนี้จะครอบคลุมเนื้อหาเกี่ยวกับคอนเซปต์ของ Solidity ในขั้นที่สูงขึ้น ขอแนะนำว่าคุณควรเรียนเนื้อหาในบทที่ 1 มาก่อนแล้วนะ -------------------------------------------------------------------------------- /tr/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Zombi Fabrikası Yapmak 3 | header: Hoş geldin, insan! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | Sanki bir **CryptoZombie**ye başlamak için ne gerektiğini düşünüyorsun, ha? 8 | 9 | Bu kurs size **Ethereum'da bir oyun yapmanın** nasıl olduğunu öğretecek. 10 | 11 | Güvenirlik için yeni başlayanlar için tasarlandı ancak başka bir dilde (örn. Javascript) 12 | biraz tecrübe sahibi olduğunuzu varsayar. 13 | -------------------------------------------------------------------------------- /zh/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 第一课结束! 3 | actions: ['答案', '提示'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | 恭喜! 你完成了第一课,为你的部队创造了第一个僵尸。 10 | 11 | # 后面的步骤 12 | 13 | 这只是开始,我们每周都会发布新的 CryptoZombies 课程, 进一步开发我们的游戏,不断壮大我们的僵尸部队。 14 | ### 1. 登录能保存你的学习进程 15 | 16 | **_Sign in_** 保存学习进程点击页面顶部的 "Save Progress"。 一旦我们发布新的课程,我们会立即通知你。 17 | 18 | ### 2. 和你的朋友分享你的僵尸吧! 19 | 20 | **_Share_** 在微博、Twitter等平台分享(需要插入图像/链接) 21 | -------------------------------------------------------------------------------- /no/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Produksjon av en Zombie Factory 3 | header: Velkommen menneske! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | Så du tror du har det som trengs for å bli en **CryptoZombie**? 8 | 9 | Dette kurset vil lære deg hvordan man **lager et spill for Ethereum**. 10 | 11 | Det er laget for nybegynnere i Solidity, men det er forutintatt at du har noe kjennskap til programmering i andre programmeringsspråk(f.eks. Javascript). 12 | -------------------------------------------------------------------------------- /pt/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Fazendo a Fábrica de Zumbi 3 | header: Bem vindo, humano! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | Então, você acha que tem o que é preciso para se tornar um **CryptoZombie**, hein? 8 | 9 | Este curso irá ensinar você como **construir um jogo no Ethereum** 10 | 11 | É projetado para iniciantes em Solidity, mas presume que você tem alguma experiência 12 | em programação em outra linguagem (exemplo: Javascript) 13 | -------------------------------------------------------------------------------- /en/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Zombies Attack Their Victims 3 | header: So, you've made it to Lesson 2! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | Impressive, human! You're a better coder than I thought. 8 | 9 | Lesson 2 will teach you how to **multiply your zombie army by feeding on other lifeforms**. 10 | 11 | In this lesson we will cover some more advanced Solidity concepts, so it's highly 12 | recommended that you complete Lesson 1 before starting. 13 | -------------------------------------------------------------------------------- /es/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Creando la Fábrica de Zombies 3 | header: ¡Bienvenido, humano! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | ¿Parece que crees tener lo que se necesita para convertirte en un **CryptoZombie**, eh? 8 | 9 | Este curso te enseñará cómo **crear un juego en Ethereum**. 10 | 11 | Está diseñado para principiantes en Solidity, pero asume que tienes alguna experiencia 12 | programando en algún otro lenguage (por ejemplo Javascript). 13 | -------------------------------------------------------------------------------- /tr/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Zombiler Kurbanlarına Saldırır 3 | header: Yani, bunu Ders 2'de yaptın! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | Etkileyici, insan! Düşündüğümden daha iyi bir kodlayıcısın. 8 | 9 | Ders 2 size **zombi ordunuzun diğer yaşam formlarında beslenerek nasıl çoğalacağını** öğretecek. 10 | 11 | Bu derste daha gelişmiş Solidity kavramlarını ele alacağız, bu nedenle başlamadan 12 | önce Ders 1'i tamamlamanız kesinlikle önerilir. 13 | -------------------------------------------------------------------------------- /fr/1/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Création de l'usine à Zombie 3 | header: Bonjour, humain ! 4 | roadmap: roadmap.jpg 5 | --- 6 | 7 | Vous pensez avoir ce qu´il faut pour devenir un **CryptoZombie**, hein ? 8 | 9 | Ce cours vous apprendra comment **réaliser un jeu basé sur Ethereum**. 10 | 11 | Il est conçu pour les débutants en Solidity, mais il est préférable que vous ayez de l'expérience en 12 | programmation dans un autre langage (Javascript par exemple). 13 | -------------------------------------------------------------------------------- /zh/4/wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 放在一起 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | battleArena: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | 恭喜你啊,又完成了第四课。 15 | 16 | 在右边测试你的战斗函数把。 17 | 18 | ## 认领你的战利品 19 | 20 | 在赢了战斗之后: 21 | 22 | 1. 你的僵尸将会升级 23 | 24 | 2. 你僵尸的 `winCount` 将会增加 25 | 26 | 3. 你将为你的僵尸大军获得一个新的僵尸 27 | 28 | 继续测试战斗,玩够了以后点击下一章来完成本课。 29 | -------------------------------------------------------------------------------- /no/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Zombiene Angriper ofrene deres 3 | header: Du har kommet deg helt til Leksjon 2! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | Imponerende, menneskelig! Du er en bedre koder enn jeg trodde. 8 | 9 | Leksjon 2 vil lære deg hvordan du kan **utvikle din zombie-hær ved å spise andre livsformer**. 10 | 11 | I denne leksjonen vil vi dekke noen mer avanserte soliditetskonsepter, så det er høyt 12 | anbefalt at du fullfører leksjon 1 før du starter. 13 | -------------------------------------------------------------------------------- /en/5/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ERC721 & Crypto-Collectibles 3 | header: "Lesson 5: ERC721 & Crypto-Collectibles" 4 | roadmap: roadmap5.jpg 5 | --- 6 | 7 | Whew! Things are starting to heat up in here... 8 | 9 | In this lesson, we're going to get a bit more advanced. 10 | 11 | We're going to talk about **tokens**, the **ERC721** standard, and **crypto-collectible assets**. 12 | 13 | In other words, we're going to **make it so you can trade your zombies with your friends.** 14 | -------------------------------------------------------------------------------- /pt/5/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ERC721 & Cripto-Colecionáveis 3 | header: "Lesson 5: ERC721 & Cripto-Colecionáveis" 4 | roadmap: roadmap5.jpg 5 | --- 6 | 7 | Ufa! As coisas estão começando a esquentar aqui... 8 | 9 | Nesta lição, Nós vamos ficar um pouco mais avançados. 10 | 11 | Vamos falar sobre **tokens**, e o padrão **ERC721**, e **ativos cripto-colecionáveis**. 12 | 13 | Em outras palavras, vamos fazer isso **para que você possa trocar zumbis com os seus amigos.** 14 | -------------------------------------------------------------------------------- /th/5/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ERC721 & Crypto-Collectibles 3 | header: "Lesson 5: ERC721 & Crypto-Collectibles" 4 | roadmap: roadmap5.jpg 5 | --- 6 | 7 | เฮ้! เครื่องเริ่มติดกันแล้วใช่มั้ยล่ะ... 8 | 9 | ในบทนี้เราจะมาเรียนรู้กันในเรื่องที่ค่อนข้างยากขึ้นอีกสักเล็กน้อยนะจ๊ะ 10 | 11 | โดยจะกล่าวถึง **tokens**, **ERC721** standard, และ **crypto-collectible assets** กัน 12 | 13 | ในอีกแง่หนึ่งก็คือเราจะ **สร้างช่องทางในการ trade ซอมบี้ของเรานั้นให้กับเพื่อน ๆ ได้** นั่นเอง 14 | -------------------------------------------------------------------------------- /pt/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Zumbis atacam suas vítimas 3 | header: Então, você chegou a Lição 2! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | Impressionante, humano! Você é melhor programador(a) do que pensei. 8 | 9 | A Lição 2 irá ensinar você como **multiplicar o seu exército zumbi alimentando-se de outras formas vida**. 10 | 11 | Nesta lição iremos abordar alguns conceitos mais avançados de Solidity, 12 | então é altamente recomendado que você complete a Lição 1 antes de começar. 13 | -------------------------------------------------------------------------------- /es/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Los Zombis Atacan A Sus Victimas 3 | header: ¡Entonces, deberás continuar a la Lección 2! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | ¡Impresionante, humano! Eres mejor programador de lo que pensaba. 8 | 9 | La Lección 2 te enseñara a **multiplicar tu ejército zombi alimentandose de otras formas de vida**. 10 | 11 | En esta lección cubriremos conceptos más avanzados de Solidity, así que es 12 | muy recomendable que completes la Lección 1 antes de empezar. 13 | -------------------------------------------------------------------------------- /jp/4/wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: まとめ 3 | actions: ['答え合わせ', 'ヒント'] 4 | requireLogin: true 5 | material: 6 | saveZombie: true 7 | battleArena: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | よくやった! これでレッスン4は終わりだ。 15 | 16 | 右のほうでお主のバトル関数をテストしてみるのだ! 17 | 18 | ## ご褒美だ 19 | 20 | バトルに勝ったら、 21 | 22 | 1. お主のゾンビはレベルアップし、 23 | 24 | 2. `winCount`を増やす。 25 | 26 | 3. 新たなゾンビを生み出して、お主のゾンビ軍団に加えるのだ! 27 | 28 | バトルを試してみよ。その後次のチャプターへ進んでレッスンを終えるのだ。 29 | -------------------------------------------------------------------------------- /ru/4/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Боевая система Зомби 3 | header: "Урок 4: Боевая система Зомби" 4 | roadmap: roadmap4.jpg 5 | --- 6 | 7 | Час настал, человек... 8 | 9 | Пришло время бросить зомбосолдат в БОЙ! 10 | 11 | Битвы зомби — развлечение не для слабонервных... 12 | 13 | В этом уроке мы объединим все изученные в предыдущих главах концепции и создадим функцию зомби-битв. А еще разберемся с функциями **payable** и узнаем, как наделить DApps способностью получать деньги от игроков. 14 | -------------------------------------------------------------------------------- /es/5/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ERC721 & Crypto-Coleccionables 3 | header: "Leccion 5: ERC721 & Crypto-Coleccionables" 4 | roadmap: roadmap5.jpg 5 | --- 6 | 7 | ¡Wow! Se está animando la cosa por aquí... 8 | 9 | En esta lección, vamos a ser un poco más avanzados. 10 | 11 | Ahora vamos a hablar sobre los **tokens**, el estándar **ERC721** y los activos/bienes/objetos **crypto-coleccionables**. 12 | 13 | En otras palabras, vamos a permitir que **puedas intercambiar tus zombies con tus amigos.** 14 | -------------------------------------------------------------------------------- /ko/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 고급 솔리디티 개념 3 | header: "레슨 3: 고급 솔리디티 개념" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | 그르르... 내가 자네의 속도를 늦출 수는 없겠군.. 그렇지?? 자네의 솔리디티 스킬은 정말 무섭군, 인간이여... 8 | 9 | 자네는 이제 기본적인 솔리디티 코딩 경험을 쌓았으니, 우리는 이더리움 개발의 조금 더 기술적인 측면을 파고들 것이네. 10 | 11 | 이번 레슨은 조금 재미가 덜할 수도 있네. 하지만 여기서 **컨트랙트 소유권이나 가스 비용, 코드 최적화, 보안** 같은 실제 DApp을 만들 때 정말 중요한 개념들을 학습할 것이네. 12 | 13 | 분명히 먼저 경고했네 - 귀여운 고양이나 무지개는 레슨 3에 없어! 14 | 15 | 그러나 다양한 솔리디티 지식을 탄탄하게 쌓을 수 있지. 이걸 시작하기 전에 자네가 레슨 2를 먼저 끝내기를 강력히 추천하네. 16 | -------------------------------------------------------------------------------- /jp/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: レッスン1終了! 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | よく頑張った!レッスン1を無事に終えた上に、ゾンビ軍団の最初のゾンビを作ったのだ。 10 | 11 | # 次のステップ 12 | 13 | 喜ぶのはまだ早い。毎週新しいCryptoZombiesのレッスンを実施するぞ。ゲームをどんどん進めて、ゾンビ軍団を成長させてくれ。 14 | 15 | ### 1. サインインして進捗を保存 16 | 17 | **_サインイン_** すると画面上の”進捗の保存”リンクで進捗を保存できる。新しいレッスンの準備ができたら直ぐに呼ぶから、それまでおとなしく待つようにな。 18 | 19 | ### 2. ゾンビを友達とシェアする 20 | 21 | ツイッターでもなんでも自分のゾンビを**_シェア_** できるぞ。 (画像・リンクを挿入する必要があります。) 22 | -------------------------------------------------------------------------------- /fr/2/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Les Zombies attaquent leurs victimes 3 | header: Alors, vous êtes arrivé à la Leçon 2 ! 4 | roadmap: roadmap2.jpg 5 | --- 6 | 7 | Vous m'impressionnez humain ! Vous êtes un meilleur codeur que j'aurais pensé. 8 | 9 | La Leçon 2 va vous apprendre à **multiplier votre armée de zombie en les nourrissant avec d'autres formes de vie**. 10 | 11 | Nous allons voir des concepts Solidity plus avancés, nous vous recommandons fortement d'avoir fini la Leçon 1 avant de commencer. 12 | -------------------------------------------------------------------------------- /fr/5/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ERC721 et crypto-collectibles 3 | header: "Leçon 5: ERC721 et crypto-collectibles" 4 | roadmap: roadmap5.jpg 5 | --- 6 | 7 | Ouf ! Ça commence à chauffer ici... 8 | 9 | Dans cette leçon, nous allons apprendre des choses un peu plus complexes. 10 | 11 | Nous allons parler des **jetons (tokens)**, du standard **ERC721**, et des **actifs crypto-collectibles**. 12 | 13 | En d'autres terme, nous allons **faire en sorte que vous puissiez échanger vos zombies avec vos amis.** 14 | -------------------------------------------------------------------------------- /jp/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Solidityの高度なコンセプト 3 | header: "レッスン 3: Solidityの高度なコンセプト" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | ウーム...人間よ、お前はSolidityに対する半端ないポテンシャルを秘めているようだ... 8 | 9 | さて、おぬしはすでにSolidityのコードが自分のものになりつつあるだろう。そこで、イーサリアムの開発におけるさらに深い技術を教えていくことにする。 10 | 11 | このレッスン3はちょっと地味だ(重要なことは地味に見えるものだ!)。だが、ここでしっかりと学べば、**コントラクトのオーナーシップ、ガス(燃料)のコスト、コードの最適化、 セキュリティ**といったDAppを開発するのに実際に必要な技術を身につけることができるだろう。 12 | 13 | ちゃんとお主に伝えたからな。レッスン3は非常に地道な作業になるぞ! 14 | 15 | しかし教えていく内容はかなり濃い内容だ。レッスン2をやっておかないとついてこれないからしっかりと復習しておけよ。 16 | 17 | -------------------------------------------------------------------------------- /ko/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 레슨 1 완료! 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | 축하하네! 레슨 1을 다 마쳤고, 좀비 군대의 첫번째 좀비를 생성했네. 10 | 11 | # 다음 단계 12 | 13 | 이건 시작에 불과하지. 우리는 매주 새로운 크립토좀비 레슨을 출시할 거네, 이로써 게임을 점점 더 개발해 나가고 좀비 군대로 계속 성장시킬 걸세. 14 | 15 | ### 1. 진도를 저장하려면 로그인하기 16 | 17 | 페이지 맨 윗부분에 "진도 저장하기" 링크를 클릭하여 자네의 진도를 저장하려면 **_로그인_**하게. 우리가 새로운 레슨을 추가하면 바로 자네에게 알려 주겠네. 18 | 19 | ### 2. 자신의 좀비를 친구들과 공유하기 20 | 21 | 트위터와 같은 SNS에 자네의 좀비를 **_공유_**해 보게. (이미지나 링크를 삽입할 필요가 있네) -------------------------------------------------------------------------------- /ko/4/wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 마무리하기 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: true 7 | battleArena: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | 축하하네! 레슨 4는 여기까지라네. 15 | 16 | 우측에서 자네의 전투 함수를 어서 테스트해보게! 17 | 18 | ## 보상을 받아가게 19 | 20 | 전투에서 이기게 되면: 21 | 22 | 1. 자네 좀비의 레벨이 오를 것이네. 23 | 24 | 2. 자네 좀비의 `winCount`가 증가할 것이네. 25 | 26 | 3. 자네의 군대에 추가할 새로운 좀비를 얻게 될 것이네! 27 | 28 | 어서 전투를 진행해보고, 레슨을 완료하기 위해 다음 챕터로 넘어가도록 하게. 29 | -------------------------------------------------------------------------------- /th/4/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Zombie Battle System 3 | header: "Lesson 4: Zombie Battle System" 4 | roadmap: roadmap4.jpg 5 | --- 6 | 7 | และเวลานี้ก็มาถึงแล้ว เจ้ามนุษย์... 8 | 9 | เวลาที่จะให้ซอมบี้มาต่อสู้กันยังไงล่ะ ! 10 | 11 | แต่การต่อสู้ของซอมบี้ไม่เหมาะกับคนจิดใจอ่อนแอหรอกนะรู้ไว้ด้วย... 12 | 13 | ในบทนี้ เราจะมาทำการหลอมรวมคอนเซ็ปต์ต่าง ๆ ที่ได้เรียนรู้กันไปในบทก่อนหน้าในการสร้างฟังก์ชั่นต่อสู้ของซอมบี้ และยังจะได้เรียนรู้เกี่ยวกับฟังก์ชั่น **payable** อีกด้วย รวมถึงการสร้าง DApps อย่างไรให้สามารถรับเงินจากผู้เล่นได้ 14 | -------------------------------------------------------------------------------- /en/4/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Zombie Battle System 3 | header: "Lesson 4: Zombie Battle System" 4 | roadmap: roadmap4.jpg 5 | --- 6 | 7 | The time has come, human... 8 | 9 | Time to make your zombies FIGHT! 10 | 11 | But zombie battles aren't for the faint of heart... 12 | 13 | In this lesson, we're going to be putting together a lot of the concepts you've learned in previous chapters to build out a zombie battle function. We're also going to learn about **payable** functions, and how to build DApps that can accept money from players. 14 | -------------------------------------------------------------------------------- /pt/4/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Sistema de Batalha Zumbi 3 | header: "Lesson 4: Sistema de Batalha Zumbi" 4 | roadmap: roadmap4.jpg 5 | --- 6 | 7 | Chegou a hora, humano... 8 | 9 | Hora de fazer os seus zumbis LUTAREM! 10 | 11 | Mas as batalhas de zumbis não são para os cardíacos... 12 | 13 | Nesta lição, nós vamos juntar todos os conceitos que você aprendeu nos capítulos anteriores para construir a função do sistema de batalha zumbi. Iremos também aprender sobre as funções **payable** (pagável), e como construir DApps que aceitam dinheiro dos jogadores. 14 | -------------------------------------------------------------------------------- /es/4/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Sistema de Batalla Zombie 3 | header: "Lesson 4: Zombie Battle System" 4 | roadmap: roadmap4.jpg 5 | --- 6 | 7 | Ha llegado el momento, humano... 8 | 9 | ¡Es hora de hacer que tus zombies PELEEN! 10 | 11 | Pero las batallas zombie no son para aquellos con problemas de corazón... 12 | 13 | En esta lección vamos estar ensamblando muchos conceptos que ha aprendido en capítulos anteriores para construir una función de batalla zombie. También vamos a aprender sobre funciones **payable**, y cómo construir DApps que puedan aceptar dinero de los jugadores. 14 | -------------------------------------------------------------------------------- /fr/4/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Système de combat de zombies 3 | header: "Leçon 4: Système de combat de zombies" 4 | roadmap: roadmap4.jpg 5 | --- 6 | 7 | Le temps est venu, humain... 8 | 9 | Il est temps de faire COMBATTRE vos zombies! 10 | 11 | Mais les combats de zombies ne sont pas pour les âmes sensibles... 12 | 13 | Dans cette leçon, nous allons regrouper beaucoup de concepts que vous avez appris dans les chapitres précédents pour mettre en place notre fonction combat de zombies. Nous allons aussi apprendre ce que sont les fonctions **payable**, et comment faire des DApps qui acceptent l'argent des joueurs. 14 | -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: /en/1 3 | translation: /%two_letters_code%/1/%original_file_name% 4 | - source: /en/2 5 | translation: /%two_letters_code%/2/%original_file_name% 6 | - source: /en/3 7 | translation: /%two_letters_code%/3/%original_file_name% 8 | - source: /en/4 9 | translation: /%two_letters_code%/4/%original_file_name% 10 | - source: /en/5 11 | translation: /%two_letters_code%/5/%original_file_name% 12 | - source: /en/6 13 | translation: /%two_letters_code%/6/%original_file_name% 14 | - source: /en/* 15 | ignore: 16 | - index.ts 17 | translation: /%two_letters_code%/%original_file_name% 18 | -------------------------------------------------------------------------------- /zh/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 放在一起 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | 恭喜您啊,居然把第三课也学完了! 15 | 16 | ## 让我们回顾一下: 17 | 18 | - 添加了一种新方法来修改CryptoKitties合约 19 | - 学会使用 `onlyOwner` 进行调用权限限制 20 | - 了解了 gas 和 gas 的优化 21 | - 为僵尸添加了 “级别” 和 “冷却周期”属性 22 | - 当僵尸达到一定级别时,允许修改僵尸的名字和 DNA 23 | - 最后,定义了一个函数,用以返回某个玩家的僵尸军团 24 | 25 | ## 领奖时间 26 | 27 | 作为完成第三课的奖励,您的两个僵尸都已经升级了! 28 | 29 | 现在 NoName(你在第2课创建的小猫僵尸)已经升级到第2级,你可以调用 `changeName` 给它取个名字。 终于不再是无名之辈了! 30 | 31 | 去给您的 NoName 取个名字吧,等你做完下一章,本课程就结束了。 32 | -------------------------------------------------------------------------------- /ru/4/wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Подведем итог 3 | actions: ['Проверить', 'Подсказать'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | battleArena: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | Поздравляем тебя! Завершен Урок 4. 15 | 16 | Вперед! Испытай боевую функцию в окне справа. 17 | 18 | ## Получи вознаграждение 19 | 20 | После победы: 21 | 22 | 1. Твой зомби получит новый уровень 23 | 24 | 2. Твой зомби увеличит `winCount` 25 | 26 | 3. К твой армии присоединится вновь созданный зомби! 27 | 28 | Испытай боевую функцию в деле! Затем переходи к следующему разделу, чтобы закончить урок. 29 | -------------------------------------------------------------------------------- /zh/6/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 应用前端和 Web3.js 3 | header: "Lesson 6: 应用前端和 Web3.js" 4 | roadmap: roadmap6.png 5 | --- 6 | 7 | 哟,你都学到这里来啦。 8 | 9 | 你真是个了不得的 CryptoZombie... 10 | 11 | 通过前五课的学习,相信你已经有了扎实的 Solidity 基础. 12 | 13 | 但是若没有一个互动界面让用户来使用,一个 DApp 就不能称之为完整。 14 | 15 | 在这一课,我们将来学习如果用一个名为 **Web3.js** 的库来为你的 DApp 创建一个基本的前端界面,和你的智能合约交互。 16 | 17 | 需要注意的是这个 APP 界面将使用 **JavaScript** 来写,并不是 Solidity。因为我们的课程专注于 Ethereum / Solidity,我们就暂时假定你已经会用HTML, JavaScript(包括 ES6 promises),以及 JQuery 写网站了。因此我们不会花时间来介绍这些技术的基础知识。 18 | 19 | 如果你还不会用 HTML/JavaScript 来写网站,你应该先去学习一下这方面的基础知识再来继续接下来的课程。 -------------------------------------------------------------------------------- /en/4/wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Wrapping It Up 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: true 7 | battleArena: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | Congratulations! That concludes Lesson 4. 15 | 16 | Go ahead and test out your battle function to the right! 17 | 18 | ## Claim your reward 19 | 20 | After winning the battle: 21 | 22 | 1. Your zombie will level up 23 | 24 | 2. Your zombie will increase his `winCount` 25 | 26 | 3. You will spawn a new zombie to add to your army! 27 | 28 | Go ahead and try the battle, then proceed to the next chapter to complete the lesson. 29 | -------------------------------------------------------------------------------- /th/4/wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Wrapping It Up 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: true 7 | battleArena: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | สุดยอดไปเลย! เพียงเท่านี้ก็ได้เรียนรู้เนื้อหาทั้งหมดของบทที่ 4 ครบหมดแล้ว 15 | 16 | ลองทดสอบฟังก์ชั่นการต่อสู้ได้ทางด้านขวามือดู! 17 | 18 | ## อย่าลืมมารับรางวัลกันด้วย 19 | 20 | หลังจากที่ชนะการแข่งขัน: 21 | 22 | 1. ซอมบี้ของเราจะเลเวลสูงขึ้น 23 | 24 | 2. มีการเพิ่ม `winCount` ไปยังซอมบี้ 25 | 26 | 3. คุณจะได้สร้างซอมบี้ตัวใหม่ขึ้นมา เพื่อจะเพิ่มไปยังกองทัพ! 27 | 28 | เดินหน้าต่อไปและลองต่อสู้ดู หลังจากนั้นก็เรียนรู้ต่อในบทถัดไปกันได้เลย 29 | -------------------------------------------------------------------------------- /zh/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 第二课概览 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | 在第一课中,我们创建了一个函数用来生成僵尸,并且将它放入区块链上的僵尸数据库中。 15 | 在第二课里,我们会让我们的 app 看起来更像一个游戏: 它得支持多用户,并且采用更加有趣,而不仅仅使用随机的方式,来生成新的僵尸。 16 | 17 | 如何生成新的僵尸呢?通过让现有的僵尸猎食其他生物! 18 | 19 | ## 僵尸猎食 20 | 21 | 僵尸猎食的时候,僵尸病毒侵入猎物,这些病毒会将猎物变为新的僵尸,加入你的僵尸大军。系统会通过猎物和猎食者僵尸的DNA计算出新僵尸的DNA。 22 | 23 | 僵尸最喜欢猎食什么物种呢? 24 | 等你学完第二课就知道了! 25 | 26 | # 实战演习 27 | 28 | 右边是一个简单的猎食演示。点击一个“人”,看看僵尸猎食的时候会发生什么? 29 | 可见,新僵尸的DNA是通过从原来的僵尸的DNA, 加上猎物的DNA计算得来的。 30 | 31 | 学完这一章,请点击“下一章”, 我们该让游戏支持多玩家模式了。 32 | -------------------------------------------------------------------------------- /es/4/wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Finalizando 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: true 7 | battleArena: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | ¡Enhorabuena! Con esto concluye la Lección 4. 15 | 16 | ¡Ahora vaya y pruebe la función de batalla a su derecha! 17 | 18 | ## Reclame su recompensa 19 | 20 | Luego de ganar la batalla: 21 | 22 | 1. Su zombie subirá de nivel. 23 | 24 | 2. El `winCount` de su zombie incrementará. 25 | 26 | 3. ¡Generará un nuevo zombie para que se sume a su ejercito! 27 | 28 | Adelante, pruebe la batalla, luego proceda al próximo capítulo para completar la lección. 29 | -------------------------------------------------------------------------------- /ru/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Урок 1 завершен! 3 | actions: ['Проверить', 'Подсказать'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | Поздравляем! Первый урок завершен. У тебе есть первый зомби-солдат для будущей армии! 10 | 11 | # Следующий шаг 12 | 13 | Ты в самом начале пути. Каждую неделю тебя будет ждать новый урок КриптоЗомби. С развитием игры вырастет и зомби-армия! 14 | 15 | ### 1. Войди, чтобы сохранить прогресс 16 | 17 | **_Войди_** и нажми «Сохранить прогресс» вверху страницы. Как только появится новый урок, мы сразу дадим тебе знать. 18 | 19 | ### 2. Поделись зомби с друзьями 20 | 21 | **_Поделиться_** зомби в Твитере и все такое (Вставить изображение / ссылку) 22 | -------------------------------------------------------------------------------- /fr/4/wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Conclusion 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | requireLogin: true 5 | material: 6 | saveZombie: true 7 | battleArena: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | Félicitations ! Cela termine la Leçon 4. 15 | 16 | Allez-y et testez votre fonction de combat à droite ! 17 | 18 | 19 | ## Revendiquer votre récompense 20 | 21 | Après avoir gagné le combat : 22 | 23 | 1. Votre zombie aura un niveau de plus 24 | 25 | 2. Votre zombie augmentera son compte `winCount` 26 | 27 | 3. Vous aurez un nouveau zombie à votre armée ! 28 | 29 | Allez-y et essayez le combat, puis passez au prochain chapitre pour terminer la leçon. 30 | -------------------------------------------------------------------------------- /pt/4/wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Juntando Tudo 3 | actions: ['verificarResposta', 'dicas'] 4 | requireLogin: true 5 | material: 6 | saveZombie: true 7 | battleArena: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | Parabéns! Isso conclui a Lição 4. 15 | 16 | Vá em frente e teste sua função de batalha zumbi a direita! 17 | 18 | ## Reivindique a sua recompensa 19 | 20 | Após vencer a batalha: 21 | 22 | 1. Seu zumbi irá aumentar um nível 23 | 24 | 2. Seu zumbi irá aumentar o `winCount` dele 25 | 26 | 3. Você irá criar um novo zumbi para adicionar ao seu exército! 27 | 28 | Vá em frente e tente uma batalha, então prossiga para próximo capítulo para completar a lição. 29 | -------------------------------------------------------------------------------- /jp/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: まとめ 3 | actions: ['答え合わせ', 'ヒント'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | よくぞここまでたどり着いた!これでレッスン 3は終わりだ。 15 | 16 | ## これまでやったことをまとめるぞ。 17 | 18 | - クリプトキティーズのコントラクトを更新する方法を追加した 19 | - `onlyOwner`でコアの機能を保護する方法を学んだ 20 | - ガスとガスの最適化について学んだ 21 | - ゾンビのレベルとクールダウンを追加した 22 | - ゾンビのレベルが上がると、ゾンビの名前やDNAを変更できる機能を追加した 23 | - ユーザーのゾンビ軍団が返る関数を追加した 24 | 25 | ## ご褒美の時間だ 26 | 27 | レッスン3を終了した褒美として、お主のゾンビを2体ともレベルアップしてやろう! 28 | 29 | NoName(レッスン2 で作った猫ゾンビ)がレベル2になったので、`changeName`を呼び出して名前をつけることができるぞ。よい名前をつけてやれ! 30 | 31 | さあ、NoNameに名前を与え、次のチャプターに進んでこのレッスンを終了せよ。 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /th/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "เข้ามาชมCryptoZombie {{ .ZombieName }}ของฉัน!", 4 | "ogDesc": "เรียน #CryptoZombies บทที่ 1 จบแล้ว!! และได้เรียนรู้เกี่ยวกับการเขียนโค้ดเกมขั้นพื้นฐานบนEthereum เข้ามาชมซอมบี้ตัวแรกในกองทัพของฉันสิ!" 5 | }, 6 | "2": { 7 | "pageTitle": "CryptoZombieของฉัน {{ .ZombieName }}เพิ่งกินCryptoKittyเข้าไปและได้อัพเกรดเลเวลขึ้น!", 8 | "ogDesc": "เรียน #CryptoZombies บทที่ 2 จบแล้ว!! และได้เพิ่มreanimated CryptoKittyเข้าไปยังกองทัพซอมบี้ของฉัน เข้ามาดูสิ!" 9 | }, 10 | "3": { 11 | "pageTitle": "Check out my CryptoZombie Army!", 12 | "ogDesc": "เรียน #CryptoZombies บทที่ 3 จบแล้ว!! และซอมบี้ของฉันก็กำลังโตขึ้นเรื่อยๆ..." 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /jp/6/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: アプリのフロントエンドとWeb3.js 3 | header: "レッスン6: アプリのフロントエンドとWeb3.js" 4 | roadmap: roadmap6.png 5 | --- 6 | 7 | なんと...ここまでやってこれたのか!? 8 | 9 | お主は平凡なクリプトゾンビではないな... 10 | 11 | レッスン5を修了して、Solidityをしっかりと理解したと証明できただろう。 12 | 13 | だがユーザーがDAppとやり取りする方法なくしては、どんなDAppも完成しないのだ... 14 | 15 | このレッスンでは、スマートコントラクトとの対話方法、そして **Web3.js** というライブラリを使ってお主のDAppのベーシックなフロントエンドを作る方法を見ていこう。 16 | 17 | アプリのフロントエンドはSolidityではなく **JavaScript** で書かれていることに注意するのだ。このコースはEthereumとSolidityにフォーカスしているが、お主がすでにHTMLとJavaScript(ES6 promisesを含む)、そしてJQueryを使って十分にウェブサイトを作れて、これら言語の基本をやらなくてもいいことを想定している。 18 | 19 | もしまだHTMLとJavaScriptでウェブサイトを楽に作れなければ、このレッスンを始める前にどこかで別の基本チュートリアルをやっておこう。 20 | -------------------------------------------------------------------------------- /no/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "Sjekk ut min CryptoZombie {{ .ZombieName }}!", 4 | "ogDesc": "Jeg ble akkurat ferdig med Leksjon 1 og lærte det grunnlegende for å lage et spill for Ethereum. Ta en titt på Zombien min!" 5 | }, 6 | "2": { 7 | "pageTitle": "Min CryptoZombie {{ .ZombieName }} spiste akkurat en CryptoKitty og gikk opp en level!", 8 | "ogDesc": "Jeg ble akkurat ferdig med CryptoZombies Leksjon 2, og la til en reanimert CryptoKitty til min Zombie-hær. Kom og ta en titt!" 9 | }, 10 | "3": { 11 | "pageTitle": "Sjekk ut min CryptoZombie hær!", 12 | "ogDesc": "Jeg ble akkurat ferdig med CryptoZombies Leksjon 3! Min zombie hær blir større" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /no/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Kapittel 1 ferdig! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | Gratulerer! Du har fullført kapittel 1, og du har laget din første zombie. 10 | 11 | # Neste steg 12 | 13 | Dette er bare begynnelsen. Vi kommer til å slippe en ny CryptoZombies leksjon hver uke, for å bygge ut spillet videre og videre. 14 | 15 | ### 1. Logg inn for å lagre progressjonen din 16 | 17 | **_Logg inn_** for å lagre progressjonen din ved å klikke "Save Progress" linken på toppen av siden. Vi lar deg vite når neste leksjon blir tilgjengelig. 18 | 19 | ### 2. Del zombien din til vennene dine 20 | 21 | **_Del_** zombien din via Twitter, blah blah, etc. (Need to insert images / links) 22 | -------------------------------------------------------------------------------- /tr/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ders 1 Tamamlandı! 3 | actions: ['cevapKontrol', 'ipuçları'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | Tebrikler! Ders 1'i tamamladınız ve ordunuzdaki ilk zombiyi oluşturdunuz. 10 | 11 | # Sonraki Adımlar 12 | 13 | Oyunu daha da ileriye götürmek ve zombi ordunuzun büyümesini sürdürmek için her hafta yeni bir CryptoZombies dersi yayınlayacağız. 14 | 15 | ### 1. İlerlemenizi kaydetmek için oturum açın 16 | 17 | Sayfanın üstündeki "İlerlemeyi Kaydet" linkine tıklayarak ilerlemenizi kaydetmek için **_Oturum aç_**. Yeni bir ders eklediğimizde size bildireceğiz. 18 | 19 | ### 2. Zombinizi arkadaşlarınızla paylaşın 20 | 21 | Zombinizi Twitter falan **_Paylaşın_** (Görüntüler / linkler eklemek gerek) 22 | -------------------------------------------------------------------------------- /th/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 1 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | ยินดีด้วย! คุณได้จบบทที่ 1 และสามารถที่จะสร้างซอมบี้ตัวแรกในกองทัพของคุณได้แล้ว! 10 | 11 | # ขั้นตอนต่อไป 12 | 13 | แต่นี่เป็นเพียงขั้นตอนเริ่มต้น! ต่อไปเราจะทำการปล่อยบทเรียนในการสร้างซอมบี้ใหม่ๆ ในแต่ละสัปดาห์เพื่อที่จะสร้างและขยายกองทัพซอมบี้ของเราต่อไปเรื่อยๆ 14 | 15 | ### 1. ลงชื่อเข้าใช้เพื่อทำการบันทึกความก้าวหน้าของคุณ 16 | 17 | **_Sign in_** เพื่อทำการบันทึกความก้าวหน้าโดยคลิกที่ลิ้งค์คำสั่ง “Save progress” ตรงด้านบนของเพจ โดยเราจะแจ้งเตือนคุณเมื่อมีบทเรียนใหม่ออกมา 18 | 19 | ### 2. อย่าลืมที่จะแบ่งปันซอมบี้ของคุณให้เพื่อนดู 20 | 21 | **_Share_** แบ่งปันซอมบี้ของคุณบน twitter และอื่นๆ (ใส่รูปหรือlink) 22 | -------------------------------------------------------------------------------- /ko/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 마무리하기 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | 축하하네! 레슨 3을 완료했네! 15 | 16 | ## 요약하자면: 17 | 18 | - CryptoKitties 컨트랙트를 변경하는 한 가지 방법을 배웠네 19 | - `onlyOwner`를 이용해 핵심적인 함수를 보호하는 방법을 배웠네 20 | - 가스와 가스 사용 최적화에 대해 배웠네 21 | - 우리 좀비들에게 레벨과 대기시간 개념을 적용했네 22 | - 좀비가 특정 레벨이 되면 좀비의 이름과 DNA를 재설정할 수 있는 함수를 만들었네 23 | - 마지막으로, 사용자의 좀비 군대를 반환하는 함수를 만들었네. 24 | 25 | ## 보상을 받아가게 26 | 27 | 레슨 3을 완료한 보상으로, 좀비들의 레벨을 올려주었네! 28 | 29 | 그리고 방금 레벨 2가 된 이름이 없는 불쌍한 NoName 좀비(레슨 2에서 만든 키티 좀비)에게 `changeName`을 이용해 이름을 지어줄 수 있네! 이제 NoName 은 없네! 30 | 31 | 이름이 없는 좀비에게 새로운 이름을 지어주게! 그리고 레슨을 완료하기 위해 다음 챕터로 넘어가게! 32 | -------------------------------------------------------------------------------- /en/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 1 Complete! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | Congratulations! You have completed lesson 1, and you have created the first zombie in your army. 10 | 11 | # Next Steps 12 | 13 | This is just the beginning. We will be releasing a new CryptoZombies lesson each week, to build out the game further and further and keep growing your zombie army. 14 | 15 | ### 1. Sign in to save your progress 16 | 17 | **_Sign in_** to save your progress by clicking the "Save Progress" link at the top of the page. We'll let you know as soon as we add a new lesson. 18 | 19 | ### 2. Share your zombie with your friends 20 | 21 | **_Share_** your zombie on Twitter, blah blah, etc. (Need to insert images / links) 22 | -------------------------------------------------------------------------------- /ko/6/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 앱 프론트엔드 & Web3.js 3 | header: "레슨 6: 앱 프론트엔드 & Web3.js" 4 | roadmap: roadmap6.png 5 | --- 6 | 7 | 허, 이렇게까지 많이 왔단 말인가?! 8 | 9 | 자네는 보통 크립토좀비가 아니군... 10 | 11 | 레슨 5를 끝내면서, 자네는 솔리디티에 대해 꽤나 잘 이해하고 있음을 보여주었네. 12 | 13 | 하지만 어떤 DApp이든 사용자들이 상호작용 할 수 있는 방법이 없다면 완성이라 할 수 없지... 14 | 15 | 이번 레슨에서 우리는 자네의 스마트 컨트랙트와 상호작용을 하는 방법을 살펴보고 **Web3.js**라는 이름의 라이브러리를 사용하여 자네의 DApp을 위한 기본적인 프론트엔드를 만들어볼 것이네. 16 | 17 | 앱 프론트엔드는 솔리디티가 아니라 **자바스크립트(JavaScript)**로 작성한다는 점을 명심하게. 하지만 이 코스의 핵심은 이더리움/솔리디티인 만큼, 우리는 자네가 HTML, 자바스크립트(ES6 promise 포함), 그리고 JQuery를 사용하여 웹사이트를 만드는 데에 익숙하다고 가정할 것이네. 즉 이러한 언어들의 기초를 다루는 데에 시간을 쓰지는 않을 것이네. 18 | 19 | 만약 자네가 아직 HTML/자바스크립트로 웹사이트를 만드는 데에 익숙하지 않다면, 이 레슨을 시작하기 전에 다른 곳에서 기본 튜토리얼을 끝내고 와야 할 것이네. -------------------------------------------------------------------------------- /pt/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lição 1 Completa! 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | Parabéns! Você completou a lição 1, e você criou o primeiro zumbi do seu exército. 10 | 11 | # Próximos Passos 12 | 13 | Isso é só o começo. Nós iremos lançar uma nova lição do CryptoZombies toda semana, para construir muito mais e continuar crescendo o nosso exército de zumbis. 14 | 15 | ### 1. Cadastre-se para salvar o seu progresso 16 | 17 | **_Cadastre-se_** para salvar o seu progresso clicando no link "Save Progress" no topo da página. Nós vamos avisar você logo que uma nova lição for adicionada. 18 | 19 | ### 2. Compartilhe o seu zumbi com os amigos 20 | 21 | **_Compartilhe_** seu zumbi no Twitter, blah blah, etc. (Need to insert images / links) 22 | -------------------------------------------------------------------------------- /pl/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ukończyłeś pierwszą lekcje! 3 | actions: ['sprawdźOdpowiedź', 'podpowiedzi'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | Gratulacje! Ukończyłeś pierwszą lekcję i stworzyłeś pierwszego zombie w swojej armii. 10 | 11 | # Następne kroki 12 | 13 | To dopiero początek. Będziemy wypuszczać nową lekcję CryptoZombies co tydzień. Dzięki temu będziemy ciągle rozbudowywać grę, tak aby armia Twoich zombie rosła. 14 | 15 | ### 1. Zarejestruj się aby zapisać swój postęp 16 | 17 | **_Zarejestruj się_** aby zapisać swój postęp klikając przycisk "Zapisz" na górze strony. Poinformujemy Cię, kiedy pojawi się nowa lekcja. 18 | 19 | ### 2. Udostępnij swojego Zombie przyjaciołom 20 | 21 | **_Udostępnij_** twojego zombie na Twitterze, blah blah, etc. (Need to insert images / links) 22 | -------------------------------------------------------------------------------- /es/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ¡Lección 1 Completa! 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | ¡Felicidades! Has completado la primera lección, y has creado el primer zombi para tu ejército. 10 | 11 | # Pasos Siguientes 12 | 13 | Esto es solamente el comienzo. Iremos publicando nuevas lecciones de CryptoZombie cada semana, para poder seguir construyendo nuestro juego y hacer crecer tu ejército de zombis. 14 | 15 | ### 1. Regístrate para guardar tu progreso 16 | 17 | **_Regístrate_** para guardar el progreso haciendo clic en el enlace "Guardar Progreso" arriba de la página. ¡Te avisaremos cuando tengamos nuevas lecciones! 18 | 19 | ### 2. Comparte tu zombi con tus amigos 20 | 21 | **_Comparte_** tu zombi en Twitter, bla bla, etc. (Necesita insertar imágenes / links) 22 | -------------------------------------------------------------------------------- /en/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Advanced Solidity Concepts 3 | header: "Lesson 3: Advanced Solidity Concepts" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | Grr... I just can't slow you down, can I? Your Solidity skills are formidable, human... 8 | 9 | Now that you've got some experience coding Solidity under your belt, we're going to dive into some of the more technical aspects of Ethereum development. 10 | 11 | This lesson will be a bit less flashy (sorry, no plot twists!). But you’ll learn some really important concepts that will take you closer to building real DApps — things like **contract ownership, gas costs, code optimization, and security**. 12 | 13 | You've been warned — no kitties and rainbows in Lesson 3! 14 | 15 | But a lot of densely-packed Solidity knowledge. We strongly recommended that you complete Lesson 2 before starting this one. 16 | -------------------------------------------------------------------------------- /fr/1/lessoncomplete.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leçon 1 complétée ! 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | lessonComplete: 6 | answer: 1 7 | --- 8 | 9 | Félicitations ! Vous avez terminé la Leçon 1, et vous avez créé le premier zombie de votre armée. 10 | 11 | # Prochaines étapes 12 | 13 | Ce n'est que le début. Chaque semaine, nous allons publier une nouvelle leçon CryptoZombies, pour faire évoluer le jeu de plus en plus et continuer de faire grandir votre armée de zombies. 14 | 15 | ### 1. Connectez-vous pour sauvegarder vos progrès 16 | 17 | **_Connectez-vous_** pour sauvegarder vos progrès en cliquant sur le lien "Sauvegarder" en haut de la page. Nous vous informerons dès qu'une nouvelle leçon sera disponible. 18 | 19 | ### 2. Partagez votre zombie avec vos amis 20 | 21 | **_Partagez_** votre zombie sur Twitter, bla bla, etc. (Insérer une image / liens) 22 | -------------------------------------------------------------------------------- /pt/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Conceitos Avançados de Solidity 3 | header: "Lição 3: Conceitos Avançados de Solidity" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | Grr... Eu não consigo parar você, consigo? Suas habilidades em Solidity são formidáveis, humano... 8 | 9 | Agora que você tem alguma experiência em Solidity, vamos mergulhar em alguns aspectos mais técnicos do desenvolvimento em Ethereum. 10 | 11 | Esta lição será um pouco menos chamativa (desculpe, sem reviravoltas!). Mas você irá aprender conceitos realmente importantes que o deixará mais perto de criar DApps reais - coisas como **propriedade do contrato, custo em gas, otimização de código e segurança**. 12 | 13 | Você foi avisado - sem gatinhos nem arcos-íris na Lição 3! 14 | 15 | Mas um grande conhecimento em Solidity densamente agrupado. Recomendamos fortemente que você complete a Lição 2 antes de começar a próxima. 16 | -------------------------------------------------------------------------------- /no/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Avanserte Solidity Konsepter 3 | header: "Leksjon 3: Avanserve Solidity Konsepter" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | Grr... Jeg klarer bare ikke å sakke deg ned, klarer jeg? Dine Solidity kunnskaper er mormidable, menneske... 8 | 9 | Nå som du har mer erfaring med å kode Solidity under beltet ditt, kommer vi til å dykke inn i noen av de mer tekniske aspektene av Ethereum-utviklingen. 10 | 11 | Denne leksjonen kommer til å være litt mindre moro(sorry, men ingen plot twist!). Men du vil lære noen virkelig viktige konsepter som tar deg et steg nærmere til å bygge virkelige DApps — ting som **contract eierskap, gas kostnad, kodeoptimalisering og sikkerhet**. 12 | 13 | Du har blitt advart - ingen kattunger eller regnbuer i leksjon 3! 14 | 15 | Men mye tett pakket soliditykunnskap. Vi anbefaler sterkt at du fullfører leksjon 2 før du starter denne. 16 | -------------------------------------------------------------------------------- /ru/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Продвинутые концепции Solidity 3 | header: "Урок 3: Продвинутые концепции Solidity" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | Грррр... Да тебя не остановить, человек! Твой Solidity становится по настоящему опасным... 8 | 9 | Теперь, когда у тебя в запасе есть опыт написания кода на Solidity, давай погрузимся в более технические аспекты разработки Ethereum. 10 | 11 | Этот урок будет не такой яркий и сюжетный, зато ты научишься действительно важным аспектам, которые приблизят тебя к построению настоящих DApps (децентрализованных приложений) — например, **принадлежность контрактов, стоимость газа, оптимизация кода и безопасность**. 12 | 13 | Мы тебя предупредили — в Уроке 3 не будет ни котиков, ни розовых единорогов! 14 | 15 | Зато будет много фундаментальных знаний Solidity. Настоятельно рекомендуем закончить Урок 2 прежде чем приступать к третьему. 16 | -------------------------------------------------------------------------------- /es/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Conceptos Avanzados de Solidity 3 | header: "Lección 3: Conceptos Avanzados de Solidity" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | Grr... ¿No puedo frenarte, no? Tus habilidades en Solidity son formidables, humano... 8 | 9 | Ahora que tienes algo de experiencia programando Solidity, vamos a adentrarnos en aspectos más técnicos del desarrollo en Ethereum. 10 | 11 | Esta lección va a ser un poco menos llamativa (lo siento, ¡no hay giros de trama!). Pero aprenderás conceptos realmente importantes que te acercarán a construir DApps reales - cosas como **propiedad de los contratos, costes del gas, optimización de código, y seguridad**. 12 | 13 | Has sido advertido — ¡No hay gatitos ni arcoiris en la Lección 3! 14 | 15 | Pero va a haber mucho conocimiento sobre Solidity empaquetado. Te recomendamos encarecidamente que completes la Lección 2 antes de empezar esta. 16 | -------------------------------------------------------------------------------- /jp/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: レッスン 2 の概要 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | レッスン 1では、名前を取得し、それを使ってランダムなゾンビを作り出し、それをブロックチェーン上のゾンビデータベースに追加するところまで教えたな。 15 | 16 | レッスン 2では、このアプリをもっとゲームのようなものに変えるのだ:マルチプレーヤー対応にして、ゾンビの作り方もランダムではなくて、もっと面白い方法に変えていくぞ。 17 | 18 | 新しいゾンビをどうやって作るのかだって? ゾンビに人間達を”喰わせる”のだっ! 19 | 20 | ## ゾンビの感染 21 | 22 | ゾンビが人間を噛むと、噛まれた人間にウィルスが感染するのだ。このウィルスは人間をゾンビに変えてお前の軍団に加えることができるものだ。新しいゾンビのDNAはゾンビのDNAと人間のDNAを計算した結果で生成されるのだ。 23 | 24 | ゾンビの好物はどんな人間か、だと・・・? 25 | 26 | なかなか面白いやつだ・・・ レッスン2を無事に終えることができたらわかるだろう! 27 | 28 | # それではテストだ 29 | 餌となる人間をゾンビに与える簡単なデモを右に用意してある。餌となる人間をクリックして、ゾンビに喰わせてやるとどうなるのかを見よ! 30 | 31 | 新しいゾンビのDNAが元のゾンビと噛まれた人間のDNAで決定されることがわかるだろう。 32 | 33 | 次に進む準備ができたら、「次のチャプター」をクリックせよ。次のチャプターではこのアプリをマルチプレーヤーゲームにしていくぞ。 34 | -------------------------------------------------------------------------------- /th/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Advanced Solidity Concepts 3 | header: "Lesson 3: Advanced Solidity Concepts" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | หนอยแน่... เรียนรู้ไวมากเลยทีเดียวนะเนี่ย ทักษะ Solidity ของคุณนี่น่ากลัวจริงจริ๊ง ... 8 | 9 | ตอนนี้เราเชื่อว่าคุณก็คงมีประสบการณ์การโค้ดบน Solidity อยู่พอสมควรแล้วล่ะเนอะ ดังนั้นจากนี้ไปเราจะต้องมาดำดิ่งเข้าสู่การพัฒนา Ethereum อย่างมืออาชีพกันได้แล้ว 10 | 11 | ในบทนี้ขอบอกไว้ก่อนเลยว่าเนื้อหาจะไม่หวือหวาหรือสนุกเหมือนที่ผ่านมาอีกต่อไป (อันนี้พูดจริงๆ นะ!) โดยเราจะให้คุณได้เรียนรู้เกี่ยวกับคอนเซปท์ที่มีความสำคัญอย่างมากในการสร้าง DApps ด้วยบทเรียนนี้ — ยกตัวอย่างเช่น **contract ownership, gas costs, code optimization, และ ความปลอดภัย (security)**. 12 | 13 | เราเตือนคุณแล้วนะ — จะไม่มีน้องแมว kitties หรือว่าสายรุ้งน่ารักๆ อีกต่อไปในบทเรียนที่ 3! 14 | 15 | เนื้อหาจะเข้มข้นขึ้น - ประกอบไปด้วยความรู้เกี่ยวกับ Solidity ชุดใหญ่ เราแนะนำให้คุณทวนบทที่ 2 ให้ดีซะก่อน 16 | -------------------------------------------------------------------------------- /tr/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "CryptoZombie'me göz at {{ .ZombieName }}!", 4 | "ogDesc": "CryptoZombies Ders 1'i tamamladım ve Ethereumda'da bir oyun kodlamanın temellerini öğrendim. Ordumdaki ilk zombiye bir bakalım!" 5 | }, 6 | "2": { 7 | "pageTitle": "CryptoZombiem {{ .ZombieName }} bir CryptoKitty yedi ve seviye atladı!", 8 | "ogDesc": "CryptoZombies Ders 2'yi tamamladım ve zombi orduma bir tekrar canlanan CryptoKitty ekledim. Gel bak" 9 | }, 10 | "3": { 11 | "pageTitle": "CryptoZombie Orduma göz at!", 12 | "ogDesc": "CryptoZombies Ders 3'ü tamamladım! Zombi ordum büyüyor..." 13 | }, 14 | "4": { 15 | "pageTitle": "CryptoZombiem kötü IOTA zombiyi mağlup etti!", 16 | "ogDesc": "CryptoZombies Ders 4'ü tamamladım! ve kötü IOTA zombiyi bağlup ettim! Gel savaşı yeniden yaşayalım..." 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /zh/5/14-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 放在一起 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | skipCheckAnswer: true 6 | material: 7 | saveZombie: false 8 | zombieDeck: 9 | zombie: 10 | lesson: 5 11 | hideSliders: true 12 | answer: 1 13 | --- 14 | 15 | 恭喜你!这些就是第五课的全部啦。 16 | 17 | 作为奖赏,我们送给你了一个10级僵尸:**H4XF13LD MORRIS 💯💯😎💯💯** ! 18 | 19 | (天啊,传奇的**H4XF13LD MORRIS 💯💯😎💯💯** 僵尸!) 20 | 21 | 这下你的僵尸大军有4个僵尸啦。 22 | 23 | 在你继续前,你可以点击每个僵尸来给它们起一个新名字, (注: **H4XF13LD MORRIS 💯💯😎💯💯** 这个梗来自于一个在2000年左右流行的古老游戏,我们的开发者觉得它很酷,你也可以给它起一个你觉得很酷的名字,比如“隔壁老王”或者“绿帽僵尸”😏)。 24 | 25 | ## 总结一下 26 | 27 | 这节课里面我们学到了 28 | 29 | - 代币, ERC721 标准,以及可交易的物件/僵尸 30 | - 库以及如何使用库 31 | - 如何利用 SafeMath 来防止溢出和下溢 32 | - 代码注释和 natspec 标准 33 | 34 | 这节教程完成了我们游戏的 Solidity 代码(仅针对当下来说,未来的课程我们也许会加入更多进去)。 35 | 36 | 在接下来的两节课中,我们将学习如何将游戏部署到以太坊以及和 **_web3.js_** 交互 (这样你就能为你的 DApp 打造一个界面了 )。 37 | 38 | 继续玩儿或者重命名你的僵尸,然后就可以点击下一章来结束本节教程了。 39 | -------------------------------------------------------------------------------- /pl/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "Zobacz mojego CryptoZombie {{ .ZombieName }}!", 4 | "ogDesc": "Właśnie skończyłem lekcje 1 CryptoZombies. Nauczyłem się podstaw programowania gier na Ethereum. Zobacz pierwszego zombiego w mojej armi!" 5 | }, 6 | "2": { 7 | "pageTitle": "Mój CryptoZombie {{ .ZombieName }} właśnie zjadł CryptoKota i zdobył następny poziom!", 8 | "ogDesc": "Właśnie skończyłem lekcje 2 CryptoZombies Dodałem ożywionego CryptoKota do mojej armi zombich." 9 | }, 10 | "3": { 11 | "pageTitle": "Zobacz moją armie zombich!", 12 | "ogDesc": "Właśnie skończyłem lekcje 3 CryptoZombies! Moja armia zombich rośnie..." 13 | }, 14 | "4": { 15 | "pageTitle": "Mój CryptoZombie pokonał złego zombiego IOTA!", 16 | "ogDesc": "Właśnie skończyłem lekcje 4 CryptoZombies. Pokonałem złego zombiego IOTA! Chodź dołącz do bitwy..." 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /fr/3/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Concepts avancés en Solidity 3 | header: "Leçon 3: Concepts avancés en Solidity" 4 | roadmap: roadmap3.png 5 | --- 6 | 7 | Grr... On dirait que je ne peut pas vous ralentir ! Vos compétences en Solidity sont redoutables humain... 8 | 9 | Maintenant que vous êtes expérimenté en programmation Solidity, nous allons nous intéresser à un des aspects les plus techniques de la programmation Ethereum. 10 | 11 | Cette leçon sera un peu moins tape-à-l’œil (désolé !). Mais vous allez apprendre des concepts vraiment importants qui vont vous rapprocher de la construction de DApps réels - des concepts comme **les contrats avec propriétaire, les coûts en gas (gaz), l'optimisation de code, et la sécurité**. 12 | 13 | Vous êtes prévenu - pas de chatons ou d'arc en ciel dans la leçon 3 ! 14 | 15 | Mais beaucoup de connaissances Solidity rassemblées. Nous vous recommandons fortement d'avoir complété la leçon 2 avant de commencer celle-ci. 16 | -------------------------------------------------------------------------------- /zh/1/lessonoverview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 课程概述 3 | actions: ['答案', '提示'] 4 | skipCheckAnswer: true 5 | material: 6 | saveZombie: false 7 | zombieResult: 8 | hideNameField: true 9 | ignoreZombieCache: true 10 | answer: 1 11 | --- 12 | 13 | 第一课你将创造一个"僵尸工厂", 用它建立一支僵尸部队。 14 | 15 | * 我们的工厂会把我们部队中所有的僵尸保存到数据库中 16 | * 工厂会有一个函数能产生新的僵尸 17 | * 每个僵尸会有一个随机的独一无二的面孔 18 | 19 | 在后面的课程里,我们会增加功能。比如,让僵尸能攻击人类或其它僵尸! 但是在实现这些好玩的功能之前,我们先要实现创建僵尸这样的基本功能。 20 | 21 | ## 僵尸DNA如何运作 22 | 23 | 僵尸的面孔取决于它的DNA。它的DNA很简单,由一个16位的整数组成: 24 | 25 | ``` 26 | 8356281049284737 27 | ``` 28 | 29 | 如同真正的DNA, 这个数字的不同部分会对应不同的特点。 前2位代表头型,紧接着的2位代表眼睛,等等。 30 | 31 | > 注: 本教程我们尽量简化。我们的僵尸只有7种头型(虽然2位数字允许100种可能性)。以后我们会加入更多的头型, 如果我们想让僵尸有更多造型。 32 | 33 | 例如,前两位数字是 `83`, 计算僵尸的头型,我们做`83 % 7 + 1` = 7 运算, 此僵尸将被赋予第七类头型。 34 | 35 | 在右边页面,移动头基因`head gene` 滑块到第七位置(圣诞帽)可见`83`所对应的特点。 36 | 37 | # 实战演习 38 | 39 | 1. 玩一下页面右侧的滑块。检验一下不同的数字对应不同的僵尸的长相。 40 | 41 | 好了,这已经足够你玩一会儿了。 当你想继续的时候,点击下面的"下一章",让我们来钻研 Solidity ! 42 | -------------------------------------------------------------------------------- /jp/5/14-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: まとめ 3 | actions: ['答え合わせ', 'ヒント'] 4 | requireLogin: true 5 | skipCheckAnswer: true 6 | material: 7 | saveZombie: false 8 | zombieDeck: 9 | zombie: 10 | lesson: 5 11 | hideSliders: true 12 | answer: 1 13 | --- 14 | 15 | よくここまで頑張ったな! これでレッスン5は終わりだ。 16 | 17 | ご褒美として、お主にレベル10の**H4XF13LD MORRIS 💯💯😎💯💯** ゾンビを与えておいた! 18 | 19 | (何てことだ、あの伝説の **H4XF13LD MORRIS 💯💯😎💯💯** ゾンビだ!!!!) 20 | 21 | お主のゾンビ軍団はゾンビ4体になった。 22 | 23 | 最後にもしゾンビの名前を変えたければ、右側でゾンビをクリックして新しい名前を入力できる。(一体なぜ **H4XF13LD MORRIS💯💯😎💯💯** の名前を変えたがっているのかわからない、最高の名前じゃないか!) 24 | 25 | ## まとめ: 26 | 27 | このレッスンで学んだこと: 28 | 29 | - トークン、ERC721規格、トレード可能な資産/ゾンビ 30 | - ライブラリとその使い方 31 | - SafeMath関数を使ったオーバーフローとアンダーフロー対策 32 | - コード中のコメントとnatspecスタンダード 33 | 34 | このレッスンで我らがゲームのSolidityコードは終わりだ!(今のところ、将来さらにレッスンを追加するかもしれない) 35 | 36 | 今後2つのレッスンで、コントラクトのデプロイ方法と **_web3.js_** を使った対話の方法をやっていくぞ(DAppのフロントエンドも作れるからな)。 37 | 38 | もし希望するならゾンビの名前を変えて、次のチャプターに進んでレッスンを終わりにしよう。 39 | -------------------------------------------------------------------------------- /zh/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "瞅瞅我的CryptoZombie {{ .ZombieName }}!", 4 | "ogDesc": "我刚完成了CryptoZombies的第1课程,来看看我的僵尸军团!" 5 | }, 6 | "2": { 7 | "pageTitle": "我的僵尸{{ .ZombieName }}刚吃了个 CryptoKitty,升级了!", 8 | "ogDesc": "我刚完成了CryptoZombies的第二课!还给我的僵尸大军收编了一只猫咪僵尸,你不来看看么?" 9 | }, 10 | "3": { 11 | "pageTitle": "来看看我的僵尸军团!", 12 | "ogDesc": "我刚完成了CryptoZombies的第三课!我的僵尸军团变大了!" 13 | }, 14 | "4": { 15 | "pageTitle": "我的僵尸刚刚打败了邪恶的 IOTA 僵尸!", 16 | "ogDesc": "我刚完成了CryptoZombies的第四课!还打败了邪恶的 IOTA 僵尸! 来一起战斗吧..." 17 | }, 18 | "5": { 19 | "pageTitle": "我的 CryptoZombie 大军壮大了!", 20 | "ogDesc": "我刚完成了 CryptoZombies 第五课, 还获得了一个10级僵尸,6不6?" 21 | }, 22 | "6": { 23 | "pageTitle": "瞧瞧我的 'The Phantom of Web3',我的 3.0 CryptoZombie!", 24 | "ogDesc": "我刚完成了 CryptoZombies 第六课, 学会了如何使用 Web3.js, MetaMask, 以及 Infura 来打造我自己的 DApp!" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ko/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 레슨 2 개요 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | 지난 레슨에서 좀비의 이름을 받아서 랜덤으로 좀비를 생성한 다음, 이 좀비를 블록체인상의 우리 앱 좀비 데이터베이스에 추가하는 함수를 만들었지. 15 | 16 | 이번 레슨에서는 우리 앱을 좀 더 게임답게 만들 걸세: 앱을 멀티플레이어 게임으로 만들고, 좀비를 랜덤으로만 생성하지 않고 좀더 재미있는 방식으로 좀비를 생성할 것이네. 17 | 18 | 어떻게 새로운 좀비를 생성할까? 좀비가 다른 생명체를 "먹도록" 해서! 19 | 20 | ## 좀비 먹이기 21 | 22 | 좀비가 먹이를 먹으면 먹이는 바이러스에 감염되지. 이 바이러스는 먹이를 새로운 좀비로 바꾸어 좀비 군대의 일원이 되도록 하지. 새로운 좀비의 DNA는 이전 좀비의 DNA와 먹이의 DNA를 활용하여 계산될 것이네. 23 | 24 | 그럼 우리 좀비들이 가장 좋아하는 먹이가 무엇일까? 25 | 26 | 그걸 알고 싶으면... 레슨 2를 마쳐야 할 것이네! 27 | 28 | # 직접 해보기 29 | 30 | 오른쪽에 보면 좀비가 먹이를 먹는 간단한 데모가 있지. 인간을 클릭해서 좀비가 먹이를 먹을 때 어떤 일이 일어나는지 보게! 31 | 32 | 새로운 좀비의 DNA는 원래 좀비의 DNA와 먹이의 DNA에 의해 결정된다는 것을 알 수 있지. 33 | 34 | 준비가 되면, "다음 챕터"를 클릭해서 계속 진행하게. 우리 게임을 멀티 플레이어 게임으로 만드는 것부터 시작하도록 하지. 35 | -------------------------------------------------------------------------------- /zh/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 数学运算 3 | actions: ['答案', '提示'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | //这里开始 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | 在 Solidity 中,数学运算很直观明了,与其它程序设计语言相同: 30 | 31 | * 加法: `x + y` 32 | * 减法: `x - y`, 33 | * 乘法: `x * y` 34 | * 除法: `x / y` 35 | * 取模 / 求余: `x % y` _(例如, `13 % 5` 余 `3`, 因为13除以5,余3)_ 36 | 37 | Solidity 还支持 **_乘方操作_** (如:x 的 y次方) // 例如: 5 ** 2 = 25 38 | ``` 39 | uint x = 5 ** 2; // equal to 5^2 = 25 40 | ``` 41 | 42 | # 实战演习 43 | 44 | 为了保证我们的僵尸的DNA只含有16个字符,我们先造一个`uint`数据,让它等于10^16。这样一来以后我们可以用模运算符 `%` 把一个整数变成16位。 45 | 46 | 1. 建立一个`uint`类型的变量,名字叫`dnaModulus`, 令其等于 **10 的 `dnaDigits` 次方**. 47 | -------------------------------------------------------------------------------- /jp/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 数式演算 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | //ここから開始するのだ 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | Solidityで使う数式は誰でもわかるような簡単なものだ。他のプログラム言語と全く同じだと思ってもらっていい: 30 | 31 | * 加算(足し算): `x + y` 32 | * 減算(引き算): `x - y`, 33 | * 乗算(掛け算): `x * y` 34 | * 除算(割り算): `x / y` 35 | * 剰余(余り): `x % y` _(例えば、`13 % 5` は `3`になる。なぜかというと、5を13で割ると、余りが3だからだ.)_ 36 | 37 | Solidityは**_指数演算子_**もサポートしている。(例 "xのy乗"、 x^y): 38 | 39 | ``` 40 | uint x = 5 ** 2; // 5^2 = 25 と同様 41 | ``` 42 | 43 | # テストの実行 44 | 45 | ゾンビのDNAが16桁の数字だと確認するために、別の`uint`を作成して10^16と設定せよ。後のレクチャーでは剰余演算子である `%`を使用して整数を16桁に縮小できる。 46 | 47 | 1. `dnaModulus`という名前の `uint`を作成し、**10の`dnaDigits`乗**に設定せよ。 48 | -------------------------------------------------------------------------------- /zh/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "合约" 3 | actions: ['答案', '提示'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. 这里写版本指令 9 | 10 | //2. 这里建立智能合约 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | 从最基本的开始入手: 21 | 22 | Solidity 的代码都包裹在**合约**里面. 一份`合约`就是以太应币应用的基本模块, 所有的变量和函数都属于一份合约, 它是你所有应用的起点. 23 | 24 | 一份名为 `HelloWorld` 的空合约如下: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## 版本指令 33 | 34 | 所有的 Solidity 源码都必须冠以 "version pragma" — 标明 Solidity 编译器的版本. 以避免将来新的编译器可能破坏你的代码。 35 | 36 | 例如: `pragma solidity ^0.4.19;` (当前 Solidity 的最新版本是 0.4.19). 37 | 38 | 综上所述, 下面就是一个最基本的合约 — 每次建立一个新的项目时的第一段代码: 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # 实战演习 49 | 50 | 为了建立我们的僵尸部队, 让我们先建立一个基础合约,称为 `ZombieFactory`。 51 | 52 | 1. 在右边的输入框里输入 `0.4.19`,我们的合约基于这个版本的编译器。 53 | 54 | 2. 建立一个空合约 `ZombieFactory`。 55 | 56 | 一切完毕,点击下面 "答案" . 如果没效果,点击 "提示"。 57 | -------------------------------------------------------------------------------- /jp/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "クリプトゾンビ {{ .ZombieName }}を作ったよ。これオススメ!", 4 | "ogDesc": "CryptoZombiesのレッスン1が終わったよ。イーサリアムでゲームを開発する基礎が学べたからオススメ。最初のゾンビを作ったよ!" 5 | }, 6 | "2": { 7 | "pageTitle": "育てているクリプトゾンビの{{ .ZombieName }} がクリプトキティを捕食してレベルアップしたよ!", 8 | "ogDesc": "CryptoZombiesのレッスン2が終わったよ。ゾンビ化させたクリプトキティをゾンビ軍団に加えたよ。面白いからオススメ! " 9 | }, 10 | "3": { 11 | "pageTitle": "クリプトゾンビ軍団が成長したよ", 12 | "ogDesc": "CryptoZombiesのレッスン3が終わったよ!作ったゾンビ軍団が成長してきたよ...:" 13 | }, 14 | "4": { 15 | "pageTitle": "クリプトゾンビが敵のIOTAゾンビをやっつけたよ!", 16 | "ogDesc": "CryptoZombiesのレッスン4が終わったよ!敵のIOTAゾンビをやっつけたよ!" 17 | }, 18 | "5": { 19 | "pageTitle": "クリプトゾンビ軍団が大きくなってきたよ!", 20 | "ogDesc": "CryptoZombiesのレッスン5が終わったよ!なんとレベル10のH4XF13LD MORRIS💯💯😎💯💯ゾンビをゲットしたよ!" 21 | }, 22 | "6": { 23 | "pageTitle": "レベル3.0のクリプトゾンビ'The Phantom of Web3'をチェックしてみて!", 24 | "ogDesc": "CryptoZombiesのレッスン6が終わったよ!DAppを作れるように、Web3.jsやMetaMask、あとInfuraの使い方を学んだよ!" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ko/5/14-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 마무리하기 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | skipCheckAnswer: true 6 | material: 7 | saveZombie: false 8 | zombieDeck: 9 | zombie: 10 | lesson: 5 11 | hideSliders: true 12 | answer: 1 13 | --- 14 | 15 | 축하하네! 레슨 5가 끝났네. 16 | 17 | 하나의 보상으로, 자네만의 레벨 10짜리 **H4XF13LD MORRIS 💯💯😎💯💯** 좀비를 자네에게 보내줬네! 18 | 19 | (오, 전설적인 **H4XF13LD MORRIS 💯💯😎💯💯** 좀비!!!!!!!) 20 | 21 | 이제 자네의 군대에는 4마리의 좀비가 있네. 22 | 23 | 계속 진행하기 전에, 우측의 좀비를 클릭하여 새로운 이름을 입력하면 좀비의 이름을 바꿀 수 있네(물론 자네가 **H4XF13LD MORRIS 💯💯😎💯💯** 좀비의 이름을 바꾸고 싶어하지는 않겠지. 명백히 최고의 이름이니까!). 24 | 25 | ## 요약하자면: 26 | 27 | 이번 레슨에서 우리는 다음을 배웠네: 28 | 29 | - 토큰, ERC721 표준, 그리고 거래할 수 있는 자산/좀비 30 | - 라이브러리와 이를 사용하는 방법 31 | - SafeMath 라이브러리를 사용하여 오버플로우와 언더플로우를 막는 방법 32 | - 코드에 주석을 추가하는 방법과 natspec 표준 33 | 34 | 이번 레슨에서 우리 게임의 솔리디티 코드를 완성했네! (지금으로서는 말이야 - 향후에 우리는 더 많은 레슨을 추가할 수도 있네). 35 | 36 | 다음 2개의 레슨에서는, 자네의 컨트랙트를 배포하고 **_web3.js_**를 사용하여 그 컨트랙트와 상호작용 하는 방법을 다룰 것이네(자네 DApp의 프론트엔드를 만들 수 있도록 말이야). 37 | 38 | 어서 자네가 원하는 대로 좀비들의 이름을 바꾸고, 이 레슨을 완료하기 위해 다음 챕터로 진행하게. 39 | -------------------------------------------------------------------------------- /zh/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 状态变量和整数 3 | actions: ['答案', '提示'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | //这里开始 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | 真棒!我们已经为我们的合约做了一个外壳, 下面学习 Solidity 中如何使用变量。 27 | 28 | **_状态变量_**是被永久地保存在合约中。也就是说它们被写入以太币区块链中. 想象成写入一个数据库。 29 | 30 | ##### 例子: 31 | ``` 32 | contract Example { 33 | // 这个无符号整数将会永久的被保存在区块链中 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | 在上面的例子中,定义 `myUnsignedInteger` 为 `uint` 类型,并赋值100。 39 | 40 | ## 无符号整数: `uint` 41 | 42 | `uint` 无符号数据类型, 指**其值不能是负数**,对于有符号的整数存在名为 `int` 的数据类型。 43 | 44 | > 注: Solidity中, `uint` 实际上是 `uint256`代名词, 一个256位的无符号整数。你也可以定义位数少的uints — `uint8`, `uint16`, `uint32`, 等…… 但一般来讲你愿意使用简单的 `uint`, 除非在某些特殊情况下,这我们后面会讲。 45 | 46 | # 实战演习 47 | 48 | 我们的僵尸DNA将由一个十六位数字组成。 49 | 50 | 定义 `dnaDigits` 为 `uint` 数据类型, 并赋值 `16`。 51 | -------------------------------------------------------------------------------- /ko/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 수학 연산 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | // 여기서 시작 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | 솔리디티에서 수학은 꽤 간단하지. 다음 연산은 대부분의 프로그래밍 언어의 수학 연산과 동일하네: 30 | 31 | * 덧셈: `x + y` 32 | * 뺄셈: `x - y`, 33 | * 곱셈: `x * y` 34 | * 나눗셈: `x / y` 35 | * 모듈로 / 나머지: `x % y` _(이를테면, `13 % 5`는 `3`이다. 왜냐면 13을 5로 나누면 나머지가 3이기 때문이다)_ 36 | 37 | 솔리디티는 **_지수 연산_**도 지원하지 (즉, "x의 y승", x^y이지): 38 | 39 | ``` 40 | uint x = 5 ** 2; // 즉, 5^2 = 25 41 | ``` 42 | 43 | # 직접 해보기 44 | 45 | 우리의 좀비 DNA가 16자리 숫자가 되도록 하기 위해 또다른 `unit`형 변수를 생성하고 10^16 값을 배정하세. 이로써 이 값을 이후 모듈로 연산자 `%`와 함께 이용하여 16자리보다 큰 수를 16자리 숫자로 줄일 수 있네. 46 | 47 | 1. `dnaModulus`라는 `uint`형 변수를 생성하고 **10의 `dnaDigits`승**을 배정한다. 48 | -------------------------------------------------------------------------------- /ru/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "Оцени моего КриптоЗомби {{ .ZombieName }}!", 4 | "ogDesc": "Завершен первый урок КриптоЗомби! Теперь я знаю базовые принципы разработки игр на Ethereum. Вот первый солдат в зомби-армии!" 5 | }, 6 | "2": { 7 | "pageTitle": "Мой КриптоЗомби {{ .ZombieName }} только что съел Криптокотика и перешел на следующий уровень!", 8 | "ogDesc": "Завершен второй урок КриптоЗомби! Посмотри, какой славный ЗомбоКотик добавлен в зомби-армию!" 9 | }, 10 | "3": { 11 | "pageTitle": "Оцени мою армию КриптоЗомби!", 12 | "ogDesc": "Завершен третий урок КриптоЗомби! Моя зомби-армия угрожающе растет..." 13 | }, 14 | "4": { 15 | "pageTitle": "Смотри, что у меня тут! Убийца IOTA!", 16 | "ogDesc": "Завершен четвертый урок КриптоЗомби! Только что мой зомби провел первую битву!" 17 | }, 18 | "5": { 19 | "pageTitle": "Моя Зомбоармия растет!", 20 | "ogDesc": "Завершен пятый урок КриптоЗомби! Получен зомби 10 уровня H4XF13LD MORRIS 💯💯😎💯💯 ВАУ!" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ru/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Подведем итог 3 | actions: ['Проверить', 'Подсказать'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | Наши поздравления! Урок 3 завершен. 15 | 16 | ## Напомним: 17 | 18 | - Мы добавили способ обновления адреса контракта Криптокотиков 19 | - Мы научились защищать основные функции с помощью `onlyOwner` 20 | - Мы узнали о газе и его оптимизации 21 | - Добавили уровни и время перезарядки для зомби 22 | - Сейчас у нас есть функция изменения имени и ДНК при достижении зомби определенного уровня 23 | - И, наконец, теперь у нас есть функция возврата всей зомби-армии 24 | 25 | ## Тебе положен подарок! 26 | 27 | В качестве вознаграждения за завершение Урока 3 оба твоих зомби получают новый уровень! 28 | 29 | Теперь, когда безымянный зомбокотик из Урока 2 получил уровень, ты можешь вызвать `changeName` и назвать его как тебе нравится. Хватит ноунеймов! 30 | 31 | Вперед! Дай имя зомби и двигайся к следующему разделу, чтобы закончить урок. 32 | -------------------------------------------------------------------------------- /en/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Wrapping It Up 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | Congratulations! That concludes Lesson 3. 15 | 16 | ## Let's recap: 17 | 18 | - We've added a way to update our CryptoKitties contracts 19 | - We've learned to protect core functions with `onlyOwner` 20 | - We've learned about gas and gas optimization 21 | - We added levels and cooldowns to our zombies 22 | - We now have functions to update a zombie's name and DNA once the zombie gets above a certain level 23 | - And finally, we now have a function to return a user's zombie army 24 | 25 | ## Claim your reward 26 | 27 | As a reward for completing Lesson 3, both of your zombies have leveled up! 28 | 29 | And now that NoName (the kitty-zombie you created in Lesson 2), is upgraded to level 2, you can call `changeName` to give him/her a name. NoName no more! 30 | 31 | Go ahead and give NoName a name, then proceed to the next chapter to complete the lesson. 32 | -------------------------------------------------------------------------------- /ko/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "제 크립토좀비 {{ .ZombieName }}을/를 확인해 보세요!", 4 | "ogDesc": "제가 방금 전에 크립토좀비 레슨 1을 마쳤어요. 이더리움 게임을 만드는 기본 내용을 배웠어요. 제가 처음 만든 좀비를 한번 보세요!" 5 | }, 6 | "2": { 7 | "pageTitle": "제 크립토좀비 {{ .ZombieName }}이/가 방금 크립토키티 한 마리를 잡아 먹고 레벨 업을 했네요!", 8 | "ogDesc": "제가 방금 전에 크립토좀비 레슨 2를 마쳤어요. 되살아난 크립토키티를 제 좀비 군대에 추가했어요. 와서 확인해 보세요!" 9 | }, 10 | "3": { 11 | "pageTitle": "제 크립토좀비 군대를 확인해 보세요!", 12 | "ogDesc": "제가 방금 전에 크립토좀비 레슨 3을 마쳤어요. 제 좀비 군대가 성장하고 있네요..." 13 | }, 14 | "4": { 15 | "pageTitle": "제 크립토좀비가 사악한 IOTA 좀비를 물리쳤어요!", 16 | "ogDesc": "제가 방금 전에 크립토좀비 레슨 4를 마치고, 사악한 IOTA 좀비를 물리쳤어요! 어서 와서 전투를 재현해보세요." 17 | }, 18 | "5": { 19 | "pageTitle": "제 크립토좀비 군대가 성장했어요!", 20 | "ogDesc": "제가 방금 전에 크립토좀비 레슨 5를 마치고, 레벨 10짜리 H4XF13LD MORRIS 💯💯😎💯💯 좀비를 얻었어요! 세상에나!" 21 | }, 22 | "6": { 23 | "pageTitle": "제 레벨 3.0 크립토좀비인 'The Phantom of Web3'를 확인해보세요!", 24 | "ogDesc": "제가 방금 전에 크립토좀비 레슨 6을 마치고, Web3.js, 메타마스크, 그리고 Infura를 사용하여 저만의 DApp을 만드는 방법을 배웠어요!" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /en/6/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: App Front-ends & Web3.js 3 | header: "Lesson 6: App Front-ends & Web3.js" 4 | roadmap: roadmap6.png 5 | --- 6 | 7 | Huh, you've made it this far?! 8 | 9 | You're no ordinary CryptoZombie... 10 | 11 | By completing Lesson 5, you've demonstrated that you have a pretty firm grasp of Solidity. 12 | 13 | But no DApp is complete without a way for its users to interact with it... 14 | 15 | In this lesson, we're going to look at how to interact with your smart contract and build a basic front-end for your DApp using a library called **Web3.js**. 16 | 17 | Note that app front-ends are written in **JavaScript**, not Solidity. But since the focus of this course is on Ethereum / Solidity, we're assuming you are already comfortable building websites with HTML, JavaScript (including ES6 promises), and JQuery, and will not be spending time covering the basics of those languages. 18 | 19 | If you are not already comfortable building websites with HTML / Javascript, you should complete a basic tutorial elsewhere before starting this lesson. 20 | -------------------------------------------------------------------------------- /zh/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 结构体 3 | actions: ['答案', '提示'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // 这里开始 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | 有时你需要更复杂的数据类型,Solidity 提供了 **结构体**: 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | 结构体允许你生成一个更复杂的数据类型,它有多个属性。 46 | 47 | > 注:我们刚刚引进了一个新类型, `string`。 字符串用于保存任意长度的 UTF-8 编码数据。 如: `string greeting = "Hello world!"`。 48 | 49 | # 实战演习 50 | 51 | 在我们的程序中,我们将创建一些僵尸!每个僵尸将拥有多个属性,所以这是一个展示结构体的完美例子。 52 | 53 | 1. 建立一个`struct` 命名为 `Zombie`. 54 | 55 | 2. 我们的 `Zombie` 结构体有两个属性: `name` (类型为 `string`), 和 `dna` (类型为 `uint`)。 56 | -------------------------------------------------------------------------------- /no/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Siste Finpuss 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | Gratulerer! Det konkluderer leksjon 3. 15 | 16 | ## La oss se tilbake på det vi har lært: 17 | 18 | - Vi har lagt til en måte å oppdatere våre CryptoKitties-kontrakter på 19 | - Vi har lært å beskytte kjernefunksjoner med `onlyOwner` 20 | - Vi har lært om gas og gas-optimalisering 21 | - Vi har lagt til nivåer og nedkjølingstid til våre zombier 22 | - Vi har nå funksjoner for å oppdaterer en zombies navn og DNA når zombien kommer over et visst nivå 23 | - Og til slutt har vi nå en funksjon for å returnere brukerens zombie-hær 24 | 25 | ## Gjør krav på belønningen din 26 | 27 | Som en belønning for å fullføre leksjon 3, har begge dine zombier levlet opp! 28 | 29 | Og nå er NoName (kitty-zombiem du opprettet i leksjon 2) oppgradert til nivå 2, du kan kjøre `changeName` for å gi ham / henne et navn. 30 | 31 | Kom igjen, gi NoName et navn, og fortsett til neste kapittel for å fullføre leksjonen. -------------------------------------------------------------------------------- /pt/6/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Aplicativos Front-end & Web3.js 3 | header: "Lição 6: Aplicativos Front-end & Web3.js" 4 | roadmap: roadmap6.png 5 | --- 6 | 7 | Huh, você chegou até aqui ?! 8 | 9 | Você não é um CryptoZombie comum ... 10 | 11 | Ao completar a Lição 5, você demonstrou ter uma compreensão firme do Solidity. 12 | 13 | Mas nenhum DApp está completo sem uma maneira de seus usuários interagirem com ele ... 14 | 15 | Nesta lição, vamos ver como interagir com seu smart contract e construir um front-end básico para seu DApp usando uma biblioteca chamada **Web3.js**. 16 | 17 | Observe que aplicativos front-ends são escritos em **JavaScript**, não em Solidity. Mas como o foco deste curso é o Ethereum / Solidity, presumimos que você já esteja confortável criando websites com HTML, JavaScript (incluindo o ES6 promisses) e JQuery, e não passaremos tempo cobrindo o básico dessas linguagens. 18 | 19 | Se você ainda não estiver confortável construindo sites com HTML / Javascript, você deve fazer algum tutorial básico em outro lugar antes de iniciar esta lição. 20 | -------------------------------------------------------------------------------- /th/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Wrapping It Up 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | ยินดีด้วยจ้า! จบบทที่ 3 แล้ว! 15 | 16 | ## มาสรุปกันดีกว่า: 17 | 18 | - เราได้เพิ่มวิธีการอัพเดท contract ชื่อ CryptoKitties ของเรา 19 | - เราได้เรียนรู้เกี่ยวกับการปกป้องฟังก์ชั่นส่วนแกนกลางด้วย `onlyOwner` 20 | - เราได้เรียนรู้เรื่อง gas รวมทั้ง gas optimization 21 | - เราได้ทำการเพิ่มคุณสมบัติ level และ cooldownWe ให้กับซอมบี้ 22 | - ตอนนี้เรามีฟังก์ชั่นที่เอาไว้อัพเดทชื่อของซอมบี้ และ DNA เมื่อซอมบี้ได้ผ่านเลเวลที่ได้กำหนดไว้ 23 | - และสุดท้ายเราได้ฟังก์ชั่นที่จะรีเทิร์นกองทัพซอมบี้ของผู้ใช้แล้ว 24 | 25 | ## มารับรางวัลไปเลย! 26 | 27 | รางวัลของการสำเร็จบทเรียนที่ 3 ก็คือ ซอมบี้ทั้ง 2 ตัวของคุณจะได้อัพเลเวล! 28 | 29 | และตอนนี้ NoName ( kitty-zombie ที่ได้สร้างขึ้นในบทเรียนที่ 2)ก็ได้เพิ่มเป็นเลเวล 2 ทำให้สามารถเรียกใช้ `changeName` เพื่อตั้งชื่อใหม่ให้กับซอมบี้แมวนี้ จะไม่ชื่อ NoName อีกต่อไป! 30 | 31 | มุ่งหน้ากันต่อและตั้งชื่อให้กับเจ้า NoName จากนั้นเราก็ไปยังบทตอนจบของบทที่ 3 กันได้เลย! 32 | -------------------------------------------------------------------------------- /pt/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Juntando Tudo 3 | actions: ['verificarResposta', 'dicas'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | Parabéns! Isso conclui a Lição 3. 15 | 16 | ## Recapitulado: 17 | 18 | - Adicionamos uma maneira de atualizar nosso contratos CryptoKitties. 19 | - Aprendemos como proteger funções principais com `onlyOwner` 20 | - Aprendemos sobre gas e otimização do gas 21 | - Adicionamos níveis e esfriamentos para os nossos zumbis 22 | - Nós agora temos funções para atualizar o nome do zumbi e o DNA uma vez que o zumbi alcança um certo nível 23 | - E finalmente, nós temos uma função quer retorna o exército de zumbi de um usuário 24 | 25 | ## Reivindique a sua recompensa 26 | 27 | Como recompensa por completar a Lição 3, ambos os seus zumbis ganhar um nível! 28 | 29 | E agora esse NoName (o zumbi-gatinho que você criou no nível 2), foi atualizado para nível 2, você pode chamar `changeName` para dar-lhe um nome. Nunca mais NoName! 30 | 31 | Vé em frente e de um nome ao NoName, então prossiga para o próximo capítulo para completar a lição. 32 | -------------------------------------------------------------------------------- /es/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Empaquetándolo Todo 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | ¡Felicidades! Has terminado la Lección 3. 15 | 16 | ## Recapitulemos: 17 | 18 | - Hemos añadido una manera de actualizar nuestro contrato CryptoKitties 19 | - Hemos aprendido a progeter las función esenciales con `onlyOwner` 20 | - Hemos aprendido sobre el gas y optimización del mismo 21 | - Hemos añadido niveles y enfriamientos a nuestros zombis 22 | - Ahora tenemos funciones para actualizar el nombre y el ADN del zombi una vez que llega a un cierto nivel 23 | - Y finalmente, ahora tenemos una función que devuelve el ejército de un usuario 24 | 25 | ## Reclama tu premio 26 | 27 | Como premio por completar la Lección 3, ¡ambos zombis han subido de nivel! 28 | 29 | Y ahora que NoName (el gato-zombi que creaste en la Lección 2), ha subido a nivel 2, puedes llamar a `changeName` para darle un nombre. ¡No más NoName! 30 | 31 | Sigue adelante y dale un nombre a NoName, después continúa con al siguiente capítulo para terminar la lección. 32 | -------------------------------------------------------------------------------- /jp/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 構造体 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // start here 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | 複雑なデータ型が必要になる場合がある。Solidityはそのために**_構造体_**を用意している: 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | 構造体を使えば、複数のプロパティを持つ複雑なデータ型を作成することができる。 46 | 47 | > 新しいデータ型である`string`を導入しました。Stringは任意の長さのUTF-8データに使用されます。例:`string greeting = "Hello world!"` 48 | 49 | 50 | # それではテストだ 51 | 52 | 私のアプリでいくつかのゾンビを作りたい!ゾンビは複数のプロパティを持せたいので、構造体を使用するちょうど良いテストだ。 53 | 54 | 1. `Zombie`という名前の`struct`を作成せよ。 55 | 56 | 2. `Zombie` 構造体にプロパティを2種類設定せよ:`name` (`string`)、と、`dna` (`uint`)だ。 57 | -------------------------------------------------------------------------------- /jp/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 状態変数と整数 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | //ここから開始するのだ 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | 見事だ!コントラクトの骨組みを作りあげたから、次はSolidityが変数をどのように扱うかについて教えていくぞ。 27 | 28 | **_状態変数_** はコントラクト内に永遠に保管され続けるものだ。要するにイーサリアムブロックチェーン上に記載されるということだ。まぁDB(データベース)に書き込むようなものだと思って良い。 29 | 30 | 31 | ##### 例: 32 | ``` 33 | contract Example { 34 | // この部分がブロックチェーン上に記載される 35 | uint myUnsignedInteger = 100; 36 | } 37 | ``` 38 | 39 | この例では、`myUnsignedInteger`という名前の`uint`を作り、100に設定しているのだ。 40 | 41 | ## 符号なし整数: `uint` 42 | 43 | `uint`というのは、符号なし整数のデータ型で、こいつは **負数ではない**ということを示しているのだ。この他に`int`という符号付整数もあるから覚えておくようにな。 44 | 45 | > 注: Solidityでは、 `uint`は256ビットの符号なし整数である`uint256`のエイリアスです。 `uint8`、` uint16`、 `uint32`など、少ないビット数でuintを宣言することもできます。しかし、一般的には、後のレッスンで説明するような特定の場合を除いて、単に` uint`を使います。 46 | 47 | # テストの実行 48 | 49 | 我々ゾンビのDNAは16桁の数字で決まる。 50 | 51 | `dnaDigits`という`uint` を宣言し、それを`16`に設定せよ。 52 | -------------------------------------------------------------------------------- /es/6/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: App Front-ends & Web3.js 3 | header: "Lección 6: App Front-ends & Web3.js" 4 | roadmap: roadmap6.png 5 | --- 6 | 7 | ¡¿Has llegado muy lejos, eh?! 8 | 9 | No eres un CryptoZombie ordinario... 10 | 11 | Completando la lección 5, has demostrado que ya tienes una comprensión muy firme de Solidity. 12 | 13 | Pero ninguna DApp está completa sin que los usuarios puedan interactuar con ella... 14 | 15 | En esta lección, vamos a aprender a como interactuar con un Contrato Inteligente y construir un front-end básico usando una librería llamada **Web3.js**. 16 | 17 | Ten en cuenta que los front-ends de las DApps están escritas en **JavaScript** y no Solidity. Pero dado que el enfoque de este curso está en Ethereum y Solidity, ya damos por hecho que ya te sientes cómodo construyendo sitios web con HTML, JavaScript (incluyendo ES6 promises), y JQuery, así que no vamos a perder mucho tiempo cubriendo lo básico de dichos lenguajes. 18 | 19 | Si aún no te sientes muy cómodo construyendo sitios web con HTML / Javascript, es muy recomendable que sigas cualquier tutorial sobre estos lenguajes de programación. 20 | -------------------------------------------------------------------------------- /fr/6/00-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Front-ends et Web3.js 3 | header: "Leçon 6 : Front-ends et Web3.js" 4 | roadmap: roadmap6.png 5 | --- 6 | 7 | Hein, vous êtes arrivé jusqu'ici ?! 8 | 9 | Vous n'êtes pas un CryptoZombie ordinaire... 10 | 11 | En finissant la Leçon 5, vous avez prouvé que vous avez une assez bonne compréhension de Solidity. 12 | 13 | Mais aucune DApp est terminée sans un moyen pour ses utilisateurs d'interagir avec... 14 | 15 | Dans cette leçon, nous allons voir comment interagir avec votre smart contract et construire un front-end basique pour votre DApp en utilisant une bibliothèque appelée **Web3.js**. 16 | 17 | Vous remarquerez que les front-ends sont écrits en **JavaScript**, et non en Solidity. Mais vu que ce cours se concentre sur Ethereum / Solidity, nous supposons que vous êtes déjà à l'aise pour construire un site web en HTML, JavaScript (y compris les promesses ES6), et JQuery, et nous ne passerons pas de temps à expliquer les bases de ces langages. 18 | 19 | Si vous n'êtes pas à l'aise pour construire un site web HTML / JavaScript, vous devriez faire un tutoriel de base ailleurs avant de commencer cette leçon. 20 | -------------------------------------------------------------------------------- /jp/1/lessonoverview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: レッスンの概要 3 | actions: ['checkAnswer', 'hints'] 4 | skipCheckAnswer: true 5 | material: 6 | saveZombie: false 7 | zombieResult: 8 | hideNameField: true 9 | ignoreZombieCache: true 10 | answer: 1 11 | --- 12 | 13 | さて、レッスン1なので、まず「ゾンビファクトリー」でゾンビの兵士を作るところから始めるぞ。 14 | 15 | * 作ったゾンビの兵士はファクトリーのデータベースで管理されるぞ 16 | * ファクトリーでは新しいゾンビを作れるぞ 17 | * 個々のゾンビは、ランダムにユニークな外見になるぞ 18 | 19 | 20 | レッスンの後半で、さらに機能を追加して、人間や他のゾンビを攻撃できる能力を身につけることができるようになるからな!まあ、それは先の話になるから、とりあえずまずは標準的なゾンビを作成するぞ。 21 | 22 | 23 | ## ゾンビのDNAの働き 24 | 25 | ゾンビの外見は「ゾンビDNA」によって決まるのだ。ゾンビDNAは簡単なもので、16桁の整数だ。例えば 26 | 27 | ``` 28 | 8356281049284737 29 | ``` 30 | 31 | 実際のDNAと同じように、それぞれの数字の部分は対応するゾンビの部分と一致するようにしてある。最初の2桁の数字はゾンビの頭の部分、次の2桁はゾンビの目の部分、という具合だ。 32 | 33 | > 注: 2桁の数字では100種類の表示が可能ですが、このチュートリアルではシンプルにするためにゾンビの頭部を7種類に設定しています。さらにバリエーションを増やしたい場合は、後日増やすことが可能です。 34 | 35 | 例えば、上で例にしたゾンビDNAの最初の2桁は「83」だ。これをゾンビの頭の種類に置き換える時に、`83 % 7 + 1 = 7`と計算する。したがってこのゾンビの頭部のタイプは7だ。 36 | 37 | 右のパネルで`頭部の遺伝子`スライダーを7番目に合わせれば(サンタクロースの帽子)、`83`がここに対応していることを確認できるだろう。 38 | 39 | # テストの実施 40 | 41 | 1. ページの右にある色々なスライダーを実際に動かしてみること。数字を変えることでゾンビの外観が変わることがわかるだろう。 42 | 43 | よし、準備運動はこれくらいで十分だろう。次に進む準備ができたら「次のチャプター」をクリックすれば、次のチャプターから実際にSolidityを教えていくから、覚悟しておけよ! 44 | 45 | -------------------------------------------------------------------------------- /ko/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 상태 변수 & 정수 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | // 여기서 시작 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | 잘했네! 이제 우리 컨트랙트를 위한 뼈대를 갖추게 되었네. 이제 솔리디티에서 변수를 다루는 방법을 배워 보도록 하지. 27 | 28 | **_상태 변수_**는 컨트랙트 저장소에 영구적으로 저장되네. 즉, 이더리움 블록체인에 기록된다는 거지. 데이터베이스에 데이터를 쓰는 것과 동일하네. 29 | 30 | ##### 예시: 31 | ``` 32 | contract Example { 33 | // 이 변수는 블록체인에 영구적으로 저장된다 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | 이 예시 컨트랙트에서는 `myUnsignedInteger`라는 `uint`를 생성하여 100이라는 값을 배정했네. 39 | 40 | ## 부호 없는 정수: `uint` 41 | 42 | `uint` 자료형은 부호 없는 정수로, **값이 음수가 아니어야 한다는** 의미네. 부호 있는 정수를 위한 `int` 자료형도 있네. 43 | 44 | > 참고: 솔리디티에서 `uint`는 실제로 `uint256`, 즉 256비트 부호 없는 정수의 다른 표현이지. `uint8`, `uint16`, `uint32` 등과 같이 uint를 더 적은 비트로 선언할 수도 있네. 하지만 앞으로의 레슨에서 다루게 될 특수한 경우가 아니라면 일반적으로 단순히 `uint`를 사용하지. 45 | 46 | # 직접 해보기 47 | 48 | 우리의 좀비 DNA는 16자리 숫자로 결정될 걸세. 49 | 50 | `dnaDigits`라는 `uint`를 선언하고 `16`이라는 값을 배정해 보게. 51 | -------------------------------------------------------------------------------- /ko/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 구조체 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // 여기서 시작 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | 자네가 좀 더 복잡한 자료형을 필요로 할 때가 가끔 있을 거네. 이를 위해 솔리디티는 **_구조체_**를 제공하지: 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | 구조체를 통해 여러 특성을 가진, 보다 복잡한 자료형을 생성할 수 있지. 46 | 47 | > 참고로 `string`이라는 새로운 자료형을 방금 소개했네. 스트링은 임의의 길이를 가진 UTF-8 데이터를 위해 활용되네. 이를테면 `string greeting = "Hello world!"` 이렇게 말이지. 48 | 49 | # 직접 해보기 50 | 51 | 우리 앱에서 좀비 몇 마리를 생성하기를 원할 것이네! 좀비들이 다양한 특성을 가질 것이니 구조체를 활용하기에 안성맞춤이군. 52 | 53 | 1. `Zombie`라는 `struct`를 생성한다. 54 | 55 | 2. 우리의 `Zombie` 구조체는 `name` (`string`형)과 `dna` (`uint`형)이라는 2가지 특성을 가진다. 56 | -------------------------------------------------------------------------------- /fr/3/13-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Conclusion 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | requireLogin: true 5 | material: 6 | saveZombie: false 7 | zombieDeck: 8 | zombie: 9 | lesson: 2 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | Félicitations ! Vous avez terminé la Leçon 3. 15 | 16 | 17 | ## Récapitulons : 18 | 19 | - Nous avons ajouté un moyen de mettre à jour notre contrat CryptoKitties 20 | - Nous avons appris à protéger les fonctions principales avec `onlyOwner` 21 | - Nous avons appris ce qu'est le gas et son optimisation 22 | - Nous avons ajouté niveau et compte à rebours à nos zombies 23 | - Nous avons maintenant des fonctions pour mettre à jour le nom d'un zombie et son ADN une fois que le zombie à un certain niveau 24 | - Et enfin, nous avons maintenant une fonction pour renvoyer l'armée de zombie d'un utilisateur 25 | 26 | ## Voici votre récompense 27 | 28 | Comme récompense pour avoir terminé la Leçon 3, vos zombies ont gagné un niveau ! 29 | 30 | Et maintenant que NoName (le zombie-chat que vous avez créé à la Leçon 2), est passé au niveau 2, vous pouvez appeler `changeName` pour lui donner un nom. C'est fini NoName ! 31 | 32 | Allez-y et donnez un nom à NoName, puis passez au prochain chapitre pour terminer la leçon. 33 | -------------------------------------------------------------------------------- /ko/1/lessonoverview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 레슨 개요 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | skipCheckAnswer: true 5 | material: 6 | saveZombie: false 7 | zombieResult: 8 | hideNameField: true 9 | ignoreZombieCache: true 10 | answer: 1 11 | --- 12 | 13 | 레슨 1에서 자네는 좀비 군대를 건설하기 위한 "좀비 공장"을 만들 걸세. 14 | 15 | * 우리 공장은 군대 내 모든 좀비의 데이터베이스를 유지할 걸세 16 | * 우리 공장은 새로운 좀비를 생성하는 함수를 가질 걸세 17 | * 각 좀비는 랜덤하고 독특한 외모를 가질 걸세 18 | 19 | 이후 레슨에서 인간이나 다른 좀비를 공격하는 능력 등 더 많은 기능을 추가할 것이네. 그전에 새로운 좀비를 생성하는 기본 기능을 추가해야 하네. 20 | 21 | ## 좀비 DNA가 활용되는 방법 22 | 23 | 좀비의 외모는 "좀비 DNA"에 따라 달라질 것이네. 좀비 DNA는 다음과 같이 간단하게 16자리 정수이네: 24 | 25 | ``` 26 | 8356281049284737 27 | ``` 28 | 29 | 실제 DNA처럼 이 숫자의 각 부분은 좀비가 가진 개별 특성과 매핑이 될 것이네. 처음 2자리 숫자는 좀비의 머리 타입과 연결이 되고, 그 다음 2자리 숫자는 좀비의 눈 모양과 연결이 되지. 30 | 31 | > 참고: 본 튜토리얼에서는 단순화해서 좀비의 머리 타입이 7개만 있을 거네 (2 자리 숫자로 100가지 경우의 수를 구할 수 있지만). 나중에 머리 타입을 다양하게 하고 싶다면 더 많은 머리 타입을 추가할 수도 있을 거네. 32 | 33 | 이를테면, 위의 예시 DNA에서 첫 2자리 숫자 `83`이네. 이를 좀비 머리 타입으로 매핑하기 위해 우리는 `83 % 7 + 1` = 7 연산을 하지. 그래서 이 DNA를 가진 좀비는 7번째 좀비 머리 타입을 갖게 되지. 34 | 35 | 우측 패널에서 `머리 유전자` 슬라이더를 7번째 머리 타입 (산타 모자)로 이동시킨 다음, `83`에 어떤 특성이 대응되는지 살펴보게. 36 | 37 | # 직접 해보기 38 | 39 | 1. 페이지 우측의 슬라이드를 가지고 놀아 보게. 다양한 숫자 값에 따라 좀비의 외모가 어떻게 달라지는지 실험해 보게. 40 | 41 | 자, 충분히 가지고 놀았겠지. 계속 진행할 준비가 되었다면, 아래 "다음 챕터"를 클릭하게. 솔리디티 학습을 본격적으로 시작해 보세! 42 | -------------------------------------------------------------------------------- /ko/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "컨트랙트" 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. 여기에 솔리디티 버전 적기 9 | 10 | //2. 여기에 컨트랙트 생성 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | 완전 기초부터 시작하기: 21 | 22 | 솔리디티 코드는 **컨트랙트** 안에 싸여 있지. `컨트랙트`는 이더리움 애플리케이션의 기본적인 구성 요소로, 모든 변수와 함수는 어느 한 컨트랙트에 속하게 마련이지. 컨트랙트는 자네의 모든 프로젝트의 시작 지점이라고 할 수 있지. 23 | 24 | 비어 있는 `HelloWorld` 컨트랙트는 다음과 같네: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Version Pragma 33 | 34 | 모든 솔리디티 소스 코드는 "version pragma"로 시작해야 하는데, 이는 해당 코드가 이용해야 하는 솔리디티 버전을 선언하는 것이지. 이를 통해 이후에 새로운 컴파일러 버전이 나와도 기존 코드가 깨지지 않도록 예방하는 거지. 35 | 36 | 선언은 다음과 같이 하면 되네: `pragma solidity ^0.4.19;` (이 코스 집필 시 최신 버전이 0.4.19임). 37 | 38 | 종합하자면 컨트랙트 초기 뼈대는 다음과 같네. 새로운 프로젝트를 시작할 때마다 이 뼈대를 제일 먼저 작성해야 하지: 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # 직접 해보기 49 | 50 | 우리의 좀비 군대 생성을 시작하기 위해 `ZombieFactory`라는 기본 컨트랙트를 생성해 보세! 51 | 52 | 1. 우측 박스에 우리 컨트랙트가 솔리디티 버전 `0.4.19`를 쓸 수 있도록 설정한다. 53 | 54 | 2. `ZombieFactory`라는 빈 컨트랙트를 생성한다. 55 | 56 | 다 마쳤으면 아래 "정답 확인하기"를 클릭하게. 막히는 부분이 있으면 "힌트 보기"를 클릭할 수도 있네. -------------------------------------------------------------------------------- /jp/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "コントラクト" 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. solidityのバージョンをここに入力 9 | 10 | //2. ここにコントラクトを作成 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | 一番簡単なことから始めよう: 21 | 22 | Solidityのコードは**コントラクト**内にカプセル化されている。`コントラクト`はイーサリアムアプリケーションの基本ブロックのことだ。変数やファンクションはすべてコントラクトに属している。これがプロジェクトの出発点になる。 23 | 24 | `HelloWorld`という名前の空のコントラクトはこういう形で表現される: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Version pragma(バージョンのプラグマ) 33 | 34 | Solidityのソースコードは全て”version pragma"で始まらなければならない。コードが使用するSolidityのコンパイラのバージョンを宣言するものだ。これは、将来コンパイラのバージョンが原因でコードが壊れることを防ぐために必要なのだ。 35 | 36 | 実際には`pragma solidity ^0.4.19;` という風に宣言する(この解説を書いている時点での最新のsolidityのバージョンは0.4.19)。 37 | 38 | これをまとめれば、コントラクトを開始するための骨組みが出来上がる ー 新しいプロジェクトを始める毎に毎回必ず書くことを忘れるなよ: 39 | 40 | 41 | ``` 42 | pragma solidity ^0.4.19; 43 | 44 | contract HelloWorld { 45 | 46 | } 47 | ``` 48 | 49 | # テストの実行 50 | 51 | ゾンビ軍団を生み出すための、`ZombieFactory`というコントラクトを作成してみよ。 52 | 53 | 1. 右のボックス内に、solidity `0.4.19`バージョンを指定して、コントラクトを使う準備をせよ 54 | 55 | 2. `ZombieFactory`という空のコントラクトを作成せよ 56 | 57 | 作成が終わったら、下の"答えの確認"をクリックせよ。もし迷うことがあれば、"ヒント"を押せばヒントをやろう。 58 | -------------------------------------------------------------------------------- /tr/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Matematiksel İşlemler 3 | actions: ['cevapKontrol', 'ipuçları'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | //start here 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | Solidity'de matematik oldukça anlaşılırdır. Aşağıdaki işlemler çoğu programlama dilinde aynıdır: 30 | 31 | * Toplama: `x + y` 32 | * Çıkarma: `x - y`, 33 | * Çarpma: `x * y` 34 | * Bölme: `x / y` 35 | * Modül / artan: `x % y` _(örneğin, `13 % 5` `3`tür, çünkü 13'ü 5'e bölerseniz, kalan 3'tür)_ 36 | 37 | Solidity ayrıca bir **_üstel operatör_** destekler (örn. "x'in y üstü", x^y): 38 | 39 | ``` 40 | uint x = 5 ** 2; // 5^2 = 25'e eşittir 41 | ``` 42 | 43 | # Teste koy 44 | Bu yol 45 | Zombimizin DNA'sının sadece 16 karakter olduğundan emin olmak için, 10^16'ya eşit başka bir `uint` yapalım. Böylelikle sonrada bir tamsayıyı 16 basamağa kısaltmak modulus `%` kullanabiliriz. 46 | 47 | 1. `dnaModulus` isimli bir `uint` oluştur ve **10'un `dnaDigits` üstüne** eşit ayarla. 48 | -------------------------------------------------------------------------------- /no/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Matematikkoperasjoner 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | //start her 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | Matte i Solidity er ganske rett frem. De følgende operasjonen er de samme som i de fleste programmeringsspråk: 30 | 31 | * Addisjon: `x + y` 32 | * Subtraksjon: `x - y`, 33 | * Multiplikasjon: `x * y` 34 | * Divisjon: `x / y` 35 | * Modulus / rest: `x % y` _(for eksempel, `13 % 5` er `3`, fordi hvis du deler 5 på 13, 3 er resten)_ 36 | 37 | Solidity støtter også **_eksponentielle operatorer_** (f.eks. "x til kraften av y", x^y): 38 | 39 | ``` 40 | uint x = 5 ** 2; // er lik 5^2 = 25 41 | ``` 42 | 43 | # Test det 44 | 45 | For å være sikker på at vår Zombies DNA bare har 16 sifre, la oss lage en annen `uint` lik 10^16. På denne måten kan vi senere bruke modulus operatoren `%` for å forkorte integeren til 16 sifre. 46 | 47 | 1. Lag en `uint` kalt `dnaModulus`, og sett den lik til **10 til kraften av `dnaDigits`**. 48 | -------------------------------------------------------------------------------- /en/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Math Operations 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | //start here 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | Math in Solidity is pretty straightforward. The following operations are the same as in most programming languages: 30 | 31 | * Addition: `x + y` 32 | * Subtraction: `x - y`, 33 | * Multiplication: `x * y` 34 | * Division: `x / y` 35 | * Modulus / remainder: `x % y` _(for example, `13 % 5` is `3`, because if you divide 5 into 13, 3 is the remainder)_ 36 | 37 | Solidity also supports an **_exponential operator_** (i.e. "x to the power of y", x^y): 38 | 39 | ``` 40 | uint x = 5 ** 2; // equal to 5^2 = 25 41 | ``` 42 | 43 | # Put it to the test 44 | 45 | To make sure our Zombie's DNA is only 16 characters, let's make another `uint` equal to 10^16. That way we can later use the modulus operator `%` to shorten an integer to 16 digits. 46 | 47 | 1. Create a `uint` named `dnaModulus`, and set it equal to **10 to the power of `dnaDigits`**. 48 | -------------------------------------------------------------------------------- /pl/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Operacje Matematyczne 3 | actions: ['zaznacz odpowiedź', 'podpowiedź'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | //zacznij tutaj 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | Matematyczne operacje w Solidity są intuicyjne. Poniższe operacje są takie same jak w większości języków programowania: 30 | 31 | * Dodawanie: `x + y` 32 | * Odejmowanie: `x - y`, 33 | * Mnożenie: `x * y` 34 | * dzielenie: `x / y` 35 | * Modulo / reszta z dzielenia: `x % y` _(na przykład, `13 % 5` wynosi `3`, ponieważ jeśli podzielisz 13 przez 5, 3 jest resztą z dzielenia)_ 36 | 37 | Solidity również wspiera **_potęgowanie_** (np. "x do potęgi y", x^y): 38 | 39 | ``` 40 | uint x = 5 ** 2; // wynosi 5^2 = 25 41 | ``` 42 | 43 | # Zadanie do wykonania 44 | 45 | Aby mieć pewność, że Dna Zombie jest 16 znakowe, stwórzmy dodatkowy `uint` równy 10^16. Będziemy mogli później uzyć operatora `%`, aby skrócić integer do 16 znaków. 46 | 47 | 1. Stwórz `uint` o nazwie `dnaModulus`, i ustaw ją jako **10 do potęgi `dnaDigits`**. 48 | -------------------------------------------------------------------------------- /es/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Operaciones Matemáticas 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | // empieza aquí 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | Las matemáticas de Solidity son bastante básicas. Las siguientes operaciones son las mismas en prácticamente todos los lenguajes de programación: 30 | 31 | * Suma: `x + y` 32 | * Resta: `x - y`, 33 | * Multiplicación: `x * y` 34 | * División: `x / y` 35 | * Módulo: `x % y` _(por ejemplo, `13 % 5` es `3`, ya que al dividir 13 entre 5, 3 es el resto)_ 36 | 37 | Solidity también tiene un **_operador exponencial_** (por ejemplo "x elevado a y", x^y): 38 | 39 | ``` 40 | uint x = 5 ** 2; // es igual a 5^2 = 25 41 | ``` 42 | 43 | # Vamos a probarlo 44 | 45 | Para asegurarnos de que el ADN de nuestro Zombi tiene solo 16 dígitos, creemos un número entero sin signo igual a 10^16 y usémoslo para calcular el módulo cualquiera. 46 | 47 | 1. Crea una variable de tipo `uint` llamada `dnaModulus`, y dale el valor de **10 elevado a `dnaDigits`**. 48 | -------------------------------------------------------------------------------- /ru/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Обзор Урока 2 3 | actions: ['Проверить', 'Подсказать'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | В первом уроке мы создали функцию, которая берет имя, из него генерирует случайного зомби, а потом добавляет его в базу данных блокчейн-приложения. 15 | 16 | Во втором уроке мы займемся геймифицикацией приложение: добавим многопользовательский режим, а вместо простой случайной генерации сделаем создание зомби более разнообразным. 17 | 18 | Как же теперь будут появляться новые зомби? Мы заставим старых зомби питаться другими формами жизни! 19 | 20 | ## Питание зомби 21 | 22 | Когда зомби питается, он передает хозяину вирус. Затем вирус превращает съеденного в нового зомби, который присоединяется к твоей армии. ДНК нового зомби вычисляется из ДНК нападающего зомби и ДНК съеденного. 23 | 24 | Кем зомби любят питаться больше всего? 25 | 26 | Закончи Урок 2 и узнаешь! 27 | 28 | # Попробуй! 29 | 30 | Справа — простая демонстрация того, как питается зомби! Кликни на человека, и увидишь что будет, когда зобми его сожрет! 31 | 32 | Видишь, ДНК зомби определяется собсвенной ДНК зомби и ДНК съеденного человека. 33 | 34 | Когда захочешь двигаться дальше, кликай на «Следующая глава», и приступим к созданию многопользовательского режима. 35 | 36 | -------------------------------------------------------------------------------- /en/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "Check out my CryptoZombie {{ .ZombieName }}!", 4 | "ogDesc": "I just completed CryptoZombies Lesson 1 and learned the basics of coding a game on Ethereum. Take a look at the first zombie in my army!" 5 | }, 6 | "2": { 7 | "pageTitle": "My CryptoZombie {{ .ZombieName }} just ate a CryptoKitty and leveled up!", 8 | "ogDesc": "I just completed CryptoZombies Lesson 2, and added a reanimated CryptoKitty to my zombie army. Come take a look!" 9 | }, 10 | "3": { 11 | "pageTitle": "Check out my CryptoZombie Army!", 12 | "ogDesc": "I just completed CryptoZombies Lesson 3! My zombie army is growing..." 13 | }, 14 | "4": { 15 | "pageTitle": "My CryptoZombie defeated the evil IOTA zombie!", 16 | "ogDesc": "I just completed CryptoZombies Lesson 4, and defeated the evil IOTA zombie! Come relive the battle..." 17 | }, 18 | "5": { 19 | "pageTitle": "My CryptoZombie Army Has Grown!", 20 | "ogDesc": "I just completed CryptoZombies Lesson 5, and got a level 10 H4XF13LD MORRIS 💯💯😎💯💯 zombie OMG!" 21 | }, 22 | "6": { 23 | "pageTitle": "Check out 'The Phantom of Web3', my Level 3.0 CryptoZombie!", 24 | "ogDesc": "I just completed CryptoZombies Lesson 6, and learned how to use Web3.js, MetaMask, and Infura to build my own DApp!" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /pt/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Operações Matemáticas 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | // comece aqui 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | Matemática em Solidity é bem fácil. As seguintes operações são as mesmas na maioria das linguagens de programação: 30 | 31 | * Adição: `x + y` 32 | * Subtração: `x - y`, 33 | * Multiplicação: `x * y` 34 | * Divisão: `x / y` 35 | * Módulo / Resto: `x % y` _(por exemplo, `13 % 5` é `3`, porque se você dividir 5 por 13, 3 é o resto)_ 36 | 37 | Solidity também suporta um **_operador exponencial_** (exemplo: "x elevado a potência de y", x^y): 38 | 39 | ``` 40 | uint x = 5 ** 2; // o mesmo que 5^2 = 25 41 | ``` 42 | 43 | # Vamos testar 44 | 45 | Para ter certeza que o nosso DNA Zumbi é somente de 16 caracteres, vamos criar outro `uint` igual o valor de 10^16. Desta maneira mais tarde podemos usar o operador de módulo `%` para encurtar um inteiro para 16 dígitos. 46 | 47 | 1. Crie um `uint` chamado `dnaModulus`, e defina-o igual a **10 elevado a potência de `dnaDigits`** 48 | -------------------------------------------------------------------------------- /ru/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Математические операции 3 | actions: ['Проверить', 'Подсказать'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | // Начало здесь 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | Математика в Solidity довольна проста. Операции точно такие же, как в большинстве языков программирования: 30 | 31 | * Сложение: `x + y` 32 | * Вычитание: `x - y`, 33 | * Умножение: `x * y` 34 | * Деление: `x / y` 35 | * Модуль и остаток от деления: `x % y` _(например, `13 % 5` будет равно `3`, если разделить 13 на 5, в остатке 3)_ 36 | 37 | Solidity поддерживает экспоненциальные операции **_exponential operator_** — возведение в степень (например "x в степени y", x^y): 38 | 39 | ``` 40 | uint x = 5 ** 2; // 5 в квадрате = 25 41 | ``` 42 | 43 | # Проверь себя 44 | 45 | Чтобы убедиться, что ДНК зомби составляет всего 16 символов, создадим еще один `uint` со значением 10^16. Таким образом, мы сможем позже использовать оператор модуля `%` для сокращения целого числа до 16 цифр. 46 | 47 | 1. Создай `uint` под названием `dnaModulus`, и задай его равным **10 в степени `dnaDigits`**. 48 | -------------------------------------------------------------------------------- /fr/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Opérations Mathématiques 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | // commencez ici 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | Les opérations Mathématiques en Solidity sont assez simples. Les opérations sont les mêmes dans la plupart des langages de programmation : 30 | 31 | * Addition : `x + y` 32 | * Soustraction : `x - y` 33 | * Multiplication : `x * y` 34 | * Division : `x / y` 35 | * Modulo / reste : `x % y` _(par exemple, `13 % 5` est `3`, car si vous divisez 13 par 5, le reste est 3)_ 36 | 37 | Solidity prend aussi en charge l'**_opérateur exponentiel_** (c.-à-d. "x à la puissance y", x^y) : 38 | 39 | ``` 40 | uint x = 5 ** 2; // égal à 5^2 = 25 41 | ``` 42 | 43 | # A votre tour 44 | 45 | Pour être sûr que notre ADN Zombie est seulement de 16 chiffres, définissons un autre `uint` égal à 10^16. Comme ça, nous pourrons plus tard utiliser l'opérateur modulo `%` pour raccourcir un entier à 16 chiffres. 46 | 47 | 1. Créez un `uint` appelé `dnaModulus`, et définissez-le égal à **10 à la puissance `dnaDigits`**. 48 | -------------------------------------------------------------------------------- /no/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leksjon 2 Oversikt 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | I leksjon 1 opprettet vi en funksjon som tar navn, bruker den til å generere en tilfeldig zombie, og legger til zombien i vår apps zombie database på blockchain. 15 | 16 | I leksjon 2 skal vi gjøre appen vår mer spilllignende: Vi skal gjøre det til flere spillere, og vi vil også legge til en morsommere måte å lage zombier i stedet for bare å generere dem tilfeldig. 17 | 18 | Hvordan skal vi lage nye zombier? Ved å ha våre zombier spise andre livsformer! 19 | 20 | ## Zombiene Spiser 21 | 22 | Når en zombie spiser, smitter den verten med et virus. Viruset slår så verten inn i en ny zombie som knytter seg til hæren din. Den nye zombieens DNA vil bli beregnet ut fra den tidligere zombieens DNA og verts DNA. 23 | 24 | Og hva liker våre zombier best å spise? 25 | 26 | For å finne ut det ... Du må fullføre leksjon 2! 27 | 28 | # Test det 29 | 30 | Det er en enkel demo av fôring til høyre. Klikk på et menneske for å se hva som skjer når zombien din spiser! 31 | 32 | Du kan se at den nye zombiens DNA er bestemt av din opprinnelige zombie DNA, så vel som vertens DNA. 33 | 34 | Når du er klar, klikk på "Next Chapter" for å fortsette, og la oss komme i gang ved å lage spillspillet vårt. 35 | -------------------------------------------------------------------------------- /en/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Structs 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // start here 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | Sometimes you need a more complex data type. For this, Solidity provides **_structs_**: 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | Structs allow you to create more complicated data types that have multiple properties. 46 | 47 | > Note that we just introduced a new type, `string`. Strings are used for arbitrary-length UTF-8 data. Ex. `string greeting = "Hello world!"` 48 | 49 | # Put it to the test 50 | 51 | In our app, we're going to want to create some zombies! And zombies will have multiple properties, so this is a perfect use case for a struct. 52 | 53 | 1. Create a `struct` named `Zombie`. 54 | 55 | 2. Our `Zombie` struct will have 2 properties: `name` (a `string`), and `dna` (a `uint`). 56 | -------------------------------------------------------------------------------- /th/1/math.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Math Operations การดำเนินการทางคณิตศาสตร์ 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | //เริ่มที่ตรงนี้ 14 | 15 | } 16 | answer: > 17 | pragma solidity ^0.4.19; 18 | 19 | 20 | contract ZombieFactory { 21 | 22 | uint dnaDigits = 16; 23 | uint dnaModulus = 10 ** dnaDigits; 24 | 25 | } 26 | 27 | --- 28 | 29 | คณิตศาสตร์ใน Solidity นั้นค่อนข้างที่จะตรงตัว โดยโอเปอร์เรชั่นด้านล่างนี้จะเป็นได้ว่าจะคล้ายๆกับในภาษาโปรแกรมทั่วๆ ไป : 30 | 31 | * Addition (การบวก): `x + y` 32 | * Subtraction (การลบ): `x - y`, 33 | * Multiplication (การคูณ): `x * y` 34 | * Division (การหาร): `x / y` 35 | * Modulus / remainder (การหารเอาเศษ): `x % y` (ตัวอย่างเช่น`13 % 5` จะได้ `3` ออกมาเป็นเศษและคำตอบของโอเปอร์เรชั่นนี้)_ 36 | 37 | นอกจากนี้ Solidity ยังรองรับ **_exponential operator_** อีกด้วย (เช่น x ยกกำลังy ,x^y): 38 | 39 | ``` 40 | uint x = 5 ** 2; // เท่ากับ 5^2 = 25 41 | ``` 42 | 43 | # ทดสอบ 44 | 45 | เพื่อทำให้มั่นใจว่า DNA ซอมบี้ของเรานั้นจะมีความยาวแค่ 16 ตัว ลองมาทำการให้ `uint` มีค่าเท่ากับ 10^16 วิธีนี้จะทำให้เราสามารถนำ Modulus operator `%` มาใช้ทำให้ข้อมูลสั้นลงเป็น 16 ตัวได้ 46 | 47 | 1. สร้างข้อมูลชนิด `uint` โดยใช้ชื่อว่า `dnaModulus` และกำหนดค่าให้เท่ากับ **10ยกกำลังด้วย `dnaDigits`** 48 | 49 | -------------------------------------------------------------------------------- /no/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Structs 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // start her 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | Noen ganger trenger du mer komplekse typer data. For dette, tilbyr Solidity **_structs_**: 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | Struct-er tillater deg å ha mer komplisert typer data som har flere egenskaper. 46 | 47 | > Noter at vi akkurat introduserte en ny type data, `string`. En string blir brukt for å lagre vilkårlig lengde UTF-8 data. F.eks. `string greeting = "Hello world!"` 48 | 49 | # Test det 50 | 51 | I appen vår kommer vi til å ville lage nye zombier! Og zombiene kommer til å ha flere egenskaper, så dette er et perfekt bruks-tilfelle for structs. 52 | 53 | 1. Lag en `struct` kalt `Zombie`. 54 | 55 | 2. `Zombie` struct-en vil ha 2 verdier: `name` (en `string`), og `dna` (en `uint`). 56 | -------------------------------------------------------------------------------- /en/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lesson 2 Overview 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | In lesson 1, we created a function that takes a name, uses it to generate a random zombie, and adds that zombie to our app's zombie database on the blockchain. 15 | 16 | In lesson 2, we're going to make our app more game-like: We're going to make it multi-player, and we'll also be adding a more fun way to create zombies instead of just generating them randomly. 17 | 18 | How will we create new zombies? By having our zombies "feed" on other lifeforms! 19 | 20 | ## Zombie Feeding 21 | 22 | When a zombie feeds, it infects the host with a virus. The virus then turns the host into a new zombie that joins your army. The new zombie's DNA will be calculated from the previous zombie's DNA and the host's DNA. 23 | 24 | And what do our zombies like to feed on most? 25 | 26 | To find that out... You'll have to complete lesson 2! 27 | 28 | # Put it to the test 29 | 30 | There's a simple demo of feeding to the right. Click on a human to see what happens when your zombie feeds! 31 | 32 | You can see that the new zombie's DNA is determined by your original zombie's DNA, as well as the host's DNA. 33 | 34 | When you're ready, click "Next chapter" to move on, and let's get started by making our game multi-player. 35 | -------------------------------------------------------------------------------- /tr/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Yapılar 3 | actions: ['cevapKontrol', 'ipuçları'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // start here 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | Bazen daha karışık bir veri türüne ihtiyacınız olur. Bunun için, Solidity **_yapılar_** sağlar: 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | Yapılar çoklu özelliklere sahip daha komplike veri türlerini oluşturmanıza izin verir. 46 | 47 | > Yeni bir tür `string` sunduğumuza dikkat edin. Diziler keyfi uzunlukta UTF-8 verisi için kullanılır. Örn. `string greeting = "Merhaba Dünya!"` 48 | 49 | # Teste koy 50 | 51 | Uygulamamızda, bazı zombiler oluşturmak isteyeceğiz! Ve zombilerin çoklu özellikleri olacak, yani bu bir yapı için mükemmel bir kullanım durumudur. 52 | 53 | 1. `Zombie` isimli bir `struct` oluştur. 54 | 55 | 2. `Zombie` yapımız 2 özelliğe sahip olacak: `name` (bir `string`), ve `dna` (bir `uint`). 56 | -------------------------------------------------------------------------------- /ru/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Структуры 3 | actions: ['Проверить', 'Подсказать'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // Начало здесь 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | Часто нужны более сложные типы данных. Для этого в Solidity есть **_structs_** (структуры): 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | С помощью структур ты создашь более сложные типы данных с несколькими свойствами. 46 | 47 | > Примечание: мы только что ввели новый тип `string` (строка). Строки используются для данных в кодировке UTF-8 произвольной длины. Пример строки приветствия = «Привет, мир!» 48 | 49 | # Проверь себя 50 | 51 | Мы собираемся создать зомби! У них будет несколько свойств, поэтому структура подойдет как нельзя лучше. 52 | 53 | 1. Создай `struct` (структуру) с именем `Zombie`. 54 | 55 | 2. У нашей структуры `Zombie` будет 2 свойства: `name` (имя) (`string` (строка)), и `dna` (ДНК) (`uint`). 56 | -------------------------------------------------------------------------------- /tr/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ders 2 Genel Bakış 3 | actions: ['cevapKontrol', 'ipuçları'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | Ders 1'de, bir isim alan, rastgele bir zombi türetmek için onu kullanan ve bu zombiyi blok zincirindeki uygulamamızın zombi veritabanına ekleyen bir fonksiyon oluşturduk. 15 | 16 | Ders 2'de, uygulamamızı biraz daha oyun gibi yapacağız: Onu çok oyunculu yapacağız ve sadece onları rastgele türetmek yerine zombileri oluşturmak için daha eğlenceli bir yol da ekliyor olacağız. 17 | 18 | Nasıl yeni zombiler oluşturacağız? Zombilerimizi diğer yaşam formlarında "besleyerek"! 19 | 20 | ## Zombi Beslemek 21 | 22 | Bir zombi beslendiğinde, bir virüs ile host bulaştırır. Virüs daha sonra hostu, ordunuza katılan yeni bir zombi haline getirir. Yeni zombinin DNA'sı önceki zombinin DNA'sı ve hostun DNA'sından hesaplanır. 23 | 24 | Ve zombilerimiz en fazla neyle beslenmeyi sever? 25 | 26 | Bunu bulmak içib... Ders 2'yi tamamlamanız gerekecek! 27 | 28 | # Teste koy 29 | 30 | Doğru beslemek için basit bir demo var. Zombiniz beslendiğinde ne olduğunu görmek için bir insana tıkla! 31 | 32 | Yeni zombi DNA'sının hostun DNA'sından olduğu gibi orijinal zombinizin DNA'sından da belirlendiğini görebilirsiniz. 33 | 34 | Hazır olduğunuzda, ilerlemek için "Sonraki bölüm"e tıklayın ve oyunumuzu çoklu oyunculu yaparak başlatalım. 35 | -------------------------------------------------------------------------------- /pl/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Structs 3 | actions: ['zaznacz odpowiedź', 'podpowiedź'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // zacznij tutaj 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | Czasami potrzebyjesz bardziej złożonego typu danych. W tym celu Solidity dostarcza **_structs_**: 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | Structs pozwalają Ci tworzyć złożone typy danych, które mają wiele właściwości 46 | 47 | > Zauważ, że właśnie zadeklarowaliśmy nowy typ zmiennej `string`. Stringi używane są dla dowolnej długości ciągów znaków UTF-8. Przykład: `string greeting = "Hello world!"` 48 | 49 | # Zadanie do wykonania 50 | 51 | Chcemy, aby w naszej aplikacji dało się tworzyć zombie! Każdy zombie ma wiele właściwości, idealnie więc powinny pasować strukts. 52 | 53 | 1. Stwórz `struct` o nazwie `Zombie`. 54 | 55 | 2. Struct `Zombie` będzie posiadał dwie właściwości: `name` ( `string`), oraz `dna` ( `uint`). 56 | -------------------------------------------------------------------------------- /pt/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Estruturas 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // comece aqui 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | Algumas vezes você precisa de um tipo de dado mais complexo. Para isso, Solidity fornece **_structs_**: 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | Estruturas permitem que você crie tipos de dados mais complicados que tem múltiplas propriedades. 46 | 47 | > Note que nos apresentamos um novo tipo de dado, `string`. Strings são de tamanho arbitrário de dados UTF-8. Ex. `string greeting = "Hello world!"` 48 | 49 | # Vamos testar 50 | 51 | Em nossa aplicação, nós queremos criar alguns zumbis! E zumbis terão múltiplas propriedades, esse é o caso perfeito para usarmos estruturas. 52 | 53 | 1. Criar uma `struct` chamada `Zombie`. 54 | 55 | 2. Nossa estrutura `Zombie` terá 2 propriedades: `name` (uma `string`), e `dna` (um `uint`). 56 | -------------------------------------------------------------------------------- /en/5/14-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Wrapping It Up 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | skipCheckAnswer: true 6 | material: 7 | saveZombie: false 8 | zombieDeck: 9 | zombie: 10 | lesson: 5 11 | hideSliders: true 12 | answer: 1 13 | --- 14 | 15 | Congratulations! That concludes Lesson 5. 16 | 17 | As a reward, we've transferred you your very own Level 10 **H4XF13LD MORRIS 💯💯😎💯💯** zombie! 18 | 19 | (Omg, the legendary **H4XF13LD MORRIS 💯💯😎💯💯** zombie!!!!111) 20 | 21 | Now you have 4 zombies in your army. 22 | 23 | Before you move on, you have the option to rename any of them if you'd like by clicking on them to the right and entering a new name. (Though I don't know why you would ever want to rename **H4XF13LD MORRIS 💯💯😎💯💯**, clearly the best name ever). 24 | 25 | ## Let's recap: 26 | 27 | In this lesson we learned about: 28 | 29 | - Tokens, the ERC721 standard, and tradable assets/zombies 30 | - Libraries and how to use them 31 | - How to prevent overflows and underflows using the SafeMath library 32 | - Commenting your code and the natspec standard 33 | 34 | This lesson concludes our game's Solidity code! (For now — we may add even more lessons in the future). 35 | 36 | In the next 2 lessons, we're going to look at how to deploy your contracts and interact with them using **_web3.js_** (so you can build a front-end for your DApp). 37 | 38 | Go ahead and rename any of your zombies if you like, then proceed to the next chapter to complete the lesson. 39 | -------------------------------------------------------------------------------- /zh/1/functions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 定义函数 3 | actions: ['答案', '提示'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | struct Zombie { 16 | uint dna; 17 | string name; 18 | } 19 | 20 | Zombie[] public zombies; 21 | 22 | // 这里开始 23 | 24 | } 25 | answer: > 26 | pragma solidity ^0.4.19; 27 | 28 | 29 | contract ZombieFactory { 30 | 31 | uint dnaDigits = 16; 32 | uint dnaModulus = 10 ** dnaDigits; 33 | 34 | struct Zombie { 35 | uint dna; 36 | string name; 37 | } 38 | 39 | Zombie[] public zombies; 40 | 41 | function createZombie(string _name, uint _dna) { 42 | 43 | } 44 | 45 | } 46 | --- 47 | 48 | 在 Solidity 中函数定义的句法如下: 49 | 50 | ``` 51 | function eatHamburgers(string _name, uint _amount) { 52 | 53 | } 54 | ``` 55 | 56 | 这是一个名为 `eatHamburgers` 的函数,它接受两个参数:一个 `string`类型的 和 一个 `uint`类型的。现在函数内部还是空的。 57 | 58 | > 注:: 习惯上函数里的变量都是以(`_`)开头 (但不是硬性规定) 以区别全局变量。我们整个教程都会沿用这个习惯。 59 | 60 | 我们的函数定义如下: 61 | 62 | ``` 63 | eatHamburgers("vitalik", 100); 64 | ``` 65 | 66 | # 实战演习 67 | 68 | 在我们的应用里,我们要能创建一些僵尸,让我们写一个函数做这件事吧! 69 | 70 | 1. 建立一个函数 `createZombie`。 它有两个参数: **_name** (类型为`string`), 和 **__dna_** (类型为`uint`)。 71 | 72 | 暂时让函数空着——我们在后面会增加内容。 73 | -------------------------------------------------------------------------------- /pt/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "Olha só o meu CryptoZombie {{ .ZombieName }}!", 4 | "ogDesc": "Eu acabei de completar a Lição 1 do CryptoZombies e aprendi o básico para codificação de um jogo em Ethereum. Olha só o primeiro zumbi do meu exército!" 5 | }, 6 | "2": { 7 | "pageTitle": "O meu CryptoZombie {{ .ZombieName }} acabou de comer um CryptoKitty e subiu de nível!", 8 | "ogDesc": "Eu acabei de completar a Lição 2 do CryptoZombies, e adicionei um CryptoKitty reanimado ao meu exército zumbi. Vem ver!" 9 | }, 10 | "3": { 11 | "pageTitle": "Olha só o meu exército CryptoZombie!", 12 | "ogDesc": "Eu acabei de completar a Lição 3 do CryptoZombies! Meu exército zumbi esta crescendo..." 13 | }, 14 | "4": { 15 | "pageTitle": "Meu CryptoZombie derrotou o maligno zumbi IOTA!", 16 | "ogDesc": "Eu acabei de completar a Lição 4 do CryptoZombies! e derrotei o maligno zumbi IOTA! Venha reviver a batalha..." 17 | }, 18 | "5": { 19 | "pageTitle": "Meu Exército CryptoZombie Cresceu!", 20 | "ogDesc": "Eu acabei de completar a Lição 5 do CryptoZombies! e consegui um zumbi de nível 10 H4XF13LD MORRIS 💯💯😎💯💯 demais!" 21 | }, 22 | "6": { 23 | "pageTitle": "Olhe só meu CryptoZombie de nível 3.0 'The Phantom of Web3'!", 24 | "ogDesc": "Eu acabei de completar a Lição 6 do CryptoZombies, e aprendi como usar Web3.js, MetaMask, e Infura para desenvolver minha própria DApp!" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /th/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Structs 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // start here 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | ในบางครั้งเราอาจจะต้องการชนิดของข้อมูลที่มีความซับซ้อนมากขึ้น โดยใน Solidity ได้เตรียมคำสั่ง **_structs_** ไว้ให้ 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | Structs จะทำให้เราสามารถสร้างชนิดข้อมูลที่มีความซับซ้อนขึ้นได้ กล่าวคือข้อมูลจะสามารถมีคุณสมบัติได้หลายแบบขึ้น 46 | 47 | > โน้ต: เราได้ทำการแนะนำข้อมูลชนิด `string` ซึ่งใช้สำหรับข้อมูลarbitrary-length UTF-8 ยกตัวอย่างเช่น `string greeting = “Hello world!”` 48 | 49 | # ทดสอบ 50 | 51 | ในแอพพลิเคชั่นของเรานั้น ต้องการที่จะสร้างซอมบี้ขึ้นมาจำนวนหนึ่ง และซอมบี้ก็จะต้องมีหลายๆคุณสมบัติอีกด้วย เราจึงจะใช้กรณีนี้เป็นตัวอย่างในการใช้คำสั่ง struct 52 | 53 | 1. สร้าง `struct` ขึ้นมาโดยใช้ชื่อว่า `Zombie` 54 | 55 | 2. ซอมบี้ของเรานั้นจะมี struct ที่มี 2 คุณสมบัติ ได้แก่: `name` (เป็น `string`) และ `dna` (เป็น `uint`) 56 | -------------------------------------------------------------------------------- /pt/5/14-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Juntando Tudo 3 | actions: ['verificarResposta', 'dicas'] 4 | requireLogin: true 5 | skipCheckAnswer: true 6 | material: 7 | saveZombie: false 8 | zombieDeck: 9 | zombie: 10 | lesson: 5 11 | hideSliders: true 12 | answer: 1 13 | --- 14 | 15 | Parabéns! Isso concluí a Lição 5. 16 | 17 | Como uma recompensa, nós transferimos pra você o seu próprio zumbi de Nível 10 **H4XF13LD MORRIS 💯💯😎💯💯** 18 | 19 | (Meu deus, o lendário zumbi **H4XF13LD MORRIS 💯💯😎💯💯** !!!!111) 20 | 21 | Agora você tem 4 zumbis em seu exército. 22 | 23 | Antes de você ir, você tem a opção de renomear qualquer qualquer um, se você clicar neles a direita e entrar um novo nome. (Mas eu não sei por que você iria querer renomear **H4XF13LD MORRIS 💯💯😎💯💯**, sem dúvida o melhor nome já visto). 24 | 25 | ## Recapitulando: 26 | 27 | Nesta lição aprendemos sobre: 28 | 29 | - Tokens, o padrão ERC721, e ativos/zumbis cambiáveis 30 | - Bibliotecas e como usá-las 31 | - Como prevenir overflows e underflows usando a biblioteca SafeMath 32 | - Comentar o seu código e padrão natspec 33 | 34 | Esta lição conclui o código do nosso jogo em Solidity! (No momento – podemos adicionar ainda mais lições no futuro). 35 | 36 | Nas próximas duas lições, iremos ver como em como implantar os seus contratos e interagir com eles usando **_web3.j_** (então você pode criar um front-end para a sua DApp). 37 | 38 | Vá em frente e renomeie qualquer um dos seus zumbis se você quiser, então siga para o próximo capítulo para completar a lição. 39 | -------------------------------------------------------------------------------- /th/4/13-battlearena.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: battle arena 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | saveZombie: false 6 | battleArena: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | ในบทที่ 1 เราได้สร้างฟังก์ชันที่สามารถรับข้อมูลในส่วนของชื่อ ซึ่งจะถูกนำไปใช้ในการสร้างซอมบี้ขึ้นมาในรูปแบบของการสุ่ม และเพิ่มซอมบี้ตัวนั้นเข้าไปใน database ที่อยู่ภายในแอพพลิเคชั่นซอมบี้ของเราบน blockchain 15 | 16 | ในบทที่ 2 เราจะทำให้แอพพลิเคชั่นนี้มีความเสมือนเกมมากขึ้น: เราจะทำให้เกมนี้สามารถเล่นได้โดยหลายผู้เล่น (multi-player) และเรายังจะเพิ่มลูกเล่นในการสร้างซอมบี้ให้มากขึ้นไปอีก ไม่สร้างจากเพียงแค่การสุ่มเท่านั้น 17 | 18 | สงสัยใช่ไหมว่าจะสร้างซอมบี้ตัวใหม่ขึ้นมาอย่างไร ? โดยการให้มัน "กิน" สิ่งมีชีวิตอื่นยังไงล่ะ ! 19 | 20 | ## ให้อาหารซอมบี้ 21 | 22 | เมื่อซอมบี้กัดกินเหยื่อจะทำให้เจ้าเหยื่อตัวนั้นติดเชื้อไวรัสเข้าไป ไวรัสก็จะเปลี่ยนให้เหยื่อกลายเป็นซอมบี้พวกเดียวกันและมาเข้าร่วมกองทัพซอมบี้ในที่สุด โดย DNA ของซอมบี้ตัวใหม่ก็จะเกิดจากการผสมกันระหว่าง DNA ของซอมบี้ตัวเก่าและของเหยื่อนั่นเอง 23 | 24 | ซอมบี้ของเรานั้นชอบกินอะไรที่สุดกันนะ ? 25 | 26 | เพื่อที่จะหาคำตอบ... คุณจะต้องสำเร็จบทเรียนที่ 2 เสียก่อน! 27 | 28 | # มาทดสอบกัน 29 | 30 | เรามีตัวอย่างง่าย ๆ ของการให้อาหารอยู่ทางด้านขวา ลองคลิกบนตัวคนเพื่อดูว่าจะเกิดอะไรขึ้นเมื่อซอมบี้กินอาหารดูสิ ! 31 | 32 | เห็นได้ชัดว่า DNA ของซอมบี้ตัวใหม่จะถูกทำการวิเคราะห์จาก DNA ของซอมบี้ตัวเริ่มต้น เช่นเดียวกันกับ DNA ของเหยื่อ 33 | 34 | เมื่อพร้อมแล้วให้คลิก "บทต่อไป" เพื่อที่จะเข้าสู่การสร้าง multi-player เกม ในบทต่อไป 35 | -------------------------------------------------------------------------------- /fr/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "Venez voir mon CryptoZombie {{ .ZombieName }} !", 4 | "ogDesc": "Je viens de finir la Leçon 1 de CryptoZombies et j'ai appris les bases pour développer un jeu sur #Ethereum. Venez voir le premier zombie de mon armée !" 5 | }, 6 | "2": { 7 | "pageTitle": "Mon CryptoZombie {{ .ZombieName }} vient juste de manger un CryptoKitty et a augmenté d'un niveau !", 8 | "ogDesc": "Je viens de finir la Leçon 2 de CryptoZombies, et j'ai ajouté un CryptoKitty mort-vivant à mon armé de zombie. Venez voir ça !" 9 | }, 10 | "3": { 11 | "pageTitle": "Venez voir mon armée de CryptoZombie !", 12 | "ogDesc": "Je viens de finir la Leçon 3 de CryptoZombies ! Mon armée de zombie s'agrandit..." 13 | }, 14 | "4": { 15 | "pageTitle": "Mon CryptoZombie a battu le zombie maléfique IOTA !", 16 | "ogDesc": "Je viens de finir la Leçon 4 de CryptoZombies, et j'ai battu le zombie maléfique IOTA ! Venez revivre la bataille..." 17 | }, 18 | "5": { 19 | "pageTitle": "Mon armée de CryptoZombie s'agrandit !", 20 | "ogDesc": "Je viens de finir la Leçon 5 de CryptoZombies, et j'ai eu un zombie H4XF13LD MORRIS 💯💯😎💯💯 de niveau 10 !" 21 | }, 22 | "6": { 23 | "pageTitle": "Découvrez 'Le fantôme de Web3', mon CryptoZombie de niveau 3.0 !", 24 | "ogDesc": "Je viens de finir la Leçon 6 de CryptoZombies, et j'ai appris à utiliser Web3.js, MetaMask, et Infura pour construire ma propre DApp !" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /th/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ภาพรวมของบทที่ 2 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | ในบทที่ 1 เราได้สร้างฟังก์ชันที่สามารถรับข้อมูลในส่วนของชื่อ ซึ่งจะถูกนำไปใช้ในการสร้างซอมบี้ขึ้นมาในรูปแบบของการสุ่ม และเพิ่มซอมบี้ตัวนั้นเข้าไปใน database ที่อยู่ภายในแอพพลิเคชั่นซอมบี้ของเราบน blockchain 15 | 16 | ในบทที่ 2 เราจะทำให้แอพพลิเคชั่นนี้มีความคล้ายเกมมากขึ้น: เราจะทำให้เกมนี้สามารถเล่นได้พร้อมกันหลายๆ คน (multi-player) และเรายังจะเพิ่มลูกเล่นในการสร้างซอมบี้ให้มากขึ้นไปอีก โดยจะไม่สร้างจากเพียงแค่การสุ่มเท่านั้น 17 | 18 | สงสัยใช่ไหมว่าจะสร้างซอมบี้ตัวใหม่ขึ้นมาอย่างไร? โดยการให้มัน "กิน" สิ่งมีชีวิตอื่นยังไงล่ะ! 19 | 20 | ## ให้อาหารซอมบี้ 21 | 22 | เมื่อซอมบี้กัดกินเหยื่อจะทำให้เจ้าเหยื่อตัวนั้นติดเชื้อไวรัสเข้าไป ไวรัสก็จะเปลี่ยนให้เหยื่อกลายเป็นซอมบี้พวกเดียวกัน และมาเข้าร่วมกองทัพซอมบี้ในที่สุด โดย DNA ของซอมบี้ตัวใหม่นั้นก็เกิดจากการผสมกันระหว่าง DNA ของซอมบี้ตัวเก่าและของเหยื่อนั่นเอง 23 | 24 | ซอมบี้ของเรานั้นชอบกินอะไรที่สุดกันนะ? 25 | 26 | เพื่อที่จะหาคำตอบ... คุณจะต้องสำเร็จบทเรียนที่ 2 เสียก่อน! 27 | 28 | # มาทดสอบกัน 29 | 30 | เรามีตัวอย่างง่ายๆ ของการให้อาหารอยู่ทางด้านขวา ลองคลิกบนตัวคนเพื่อดูว่าจะเกิดอะไรขึ้นเมื่อซอมบี้กินอาหารดูสิ! 31 | 32 | เห็นได้ชัดว่า DNA ของซอมบี้ตัวใหม่จะถูกทำการวิเคราะห์จาก DNA ของซอมบี้ตัวเริ่มต้น เช่นเดียวกันกับ DNA ของเหยื่อ 33 | 34 | เมื่อพร้อมแล้วให้คลิก "บทต่อไป" เพื่อที่จะเข้าสู่การสร้าง multi-player เกมส์ ในบทต่อไป 35 | -------------------------------------------------------------------------------- /es/share-template-msgs.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "pageTitle": "Echalé un vistazo a mi CryptoZombie {{ .ZombieName }}!", 4 | "ogDesc": "He completado la Lección 1 de CryptoZombies y he aprendido los elementos básicos de la programación de un juego basado en Ethereum. ¡Echalé un vistazo a mi primer ejército zombi!" 5 | }, 6 | "2": { 7 | "pageTitle": "¡Mi CryptoZombie {{ .ZombieName }} se ha comido un CryptoKitty y ha subido de nivel!", 8 | "ogDesc": "He completado la Lección 2 de CryptoZombies, y he añadido un CryptoKitty reanimado a mi ejército zombi. ¡Vente y compruébalo!" 9 | }, 10 | "3": { 11 | "pageTitle": "¡Comprueba mi ejército de CryptoZombies!", 12 | "ogDesc": "¡He completado la Lección 3 de CryptoZombies! Mi ejército zombi está creciendo..." 13 | }, 14 | "4": { 15 | "pageTitle": "¡Mi ejército de CryptoZombies ha derrotado al malvado zombi IOTA!", 16 | "ogDesc": "¡He completado la Lección 4 de CryptoZombies, y he derrotado al malvado zombi IOTA! Vente a revivir la batalla..." 17 | }, 18 | "5": { 19 | "pageTitle": "¡Mi ejército de CryptoZombies ha crecido!", 20 | "ogDesc": "¡He completado la Lección 5 de CryptoZombies, y tengo mi zombi nivel 10 H4XF13LD MORRIS 💯💯😎💯💯 OMG!" 21 | }, 22 | "6": { 23 | "pageTitle": "¡Echa un vistazo al CryptoZombie 'The Phantom of Web 3' de nivel 3.0!", 24 | "ogDesc": "¡He completado la Lección 6 de CryptoZombies, y he aprendido a usar Web3.js, MetaMask e Infura para hacer mi DApp!" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /th/5/14-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Wrapping It Up 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | skipCheckAnswer: true 6 | material: 7 | saveZombie: false 8 | zombieDeck: 9 | zombie: 10 | lesson: 5 11 | hideSliders: true 12 | answer: 1 13 | --- 14 | 15 | ยินดีด้วยจ้า! บทที่ 5 ก็ได้จบลงด้วยประการฉะนี้ 16 | 17 | เพื่อเป็นรางวัล เราจะมอบซอมบี้ Level 10 **H4XF13LD MORRIS 💯💯😎💯💯** ให้ไปเลย! 18 | 19 | (โอ้โห เจ้าซอมบี้ในตำนาน **H4XF13LD MORRIS 💯💯😎💯💯** zombie!!!!!!! เลยนะ) 20 | 21 | ตอนนี้แปลว่าเราก็จะมีซอมบี้ 4 ตัวในกองทัพแล้วล่ะ 22 | 23 | ก่อนที่จะจากกันไป อย่าลืมว่าเรามี option ในการตั้งชื่อใหม่ให้กับซอมบี้ตัวใดก็ได้โดยการคลิกที่ด้านขวาของมันและพิมพ์ชื่อใหม่ลงไป (แต่ถึงยังงั้นเถอะ เราก็ไม่คิดว่าคุณจะอยากเปลี่ยนชื่อ **H4XF13LD MORRIS 💯💯😎💯💯** ไปเป็นอย่างอื่นหรอกเนอะ นี่มันเป็นชื่อที่ดีจะตาย) 24 | 25 | ## มาทวนความรู้กันสักหน่อย: 26 | 27 | ในบทนี้เราได้เรียนรู้เกี่ยวกับ: 28 | 29 | - Tokens, the ERC721 standard, และ tradable assets/zombies 30 | - Library ต่าง ๆ รวมถึงการใช้งาน 31 | - การป้องกัน overflows และ underflows โดยใช้ SafeMath library 32 | - การ Comment โค้ด และ the natspec standard 33 | 34 | ในบทนี้เราได้ครอบคลุมโค้ด Solidity ทั้งหมดสำหรับเกมของเราไปเป็นที่เรียบร้อย! (ในตอนนี้— เราอาจเพิ่มบทเรียนเข้ามาอีกในอนาคตอันใกล้) 35 | 36 | ในอีก 2 บทเรียนนับจากนี้ เราจะได้เรียนรู้เกี่ยวกับการ deploy contract และการ interact กับมันโดยใช้ **_web3.js_** (ซึ่งจะทำให้สามารถสร้าง front-end ของ DApp ออกมาได้ในที่สุด) 37 | 38 | เดินหน้าต่อไปและอย่าลืมเปลี่ยนชื่อซอมบี้หากต้องการ จากนั้นก็มุ่งหน้าไปยังบทถัดไปเพื่อจบบทนี้กันได้แล้ว 39 | -------------------------------------------------------------------------------- /fr/5/14-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Conclusion 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | requireLogin: true 5 | skipCheckAnswer: true 6 | material: 7 | saveZombie: false 8 | zombieDeck: 9 | zombie: 10 | lesson: 5 11 | hideSliders: true 12 | answer: 1 13 | --- 14 | 15 | Félicitations ! Vous avez terminé la Leçon 5. 16 | 17 | Comme récompense, nous vous avons transféré votre propre zombie de niveau 10 **H4XF13LD MORRIS 💯💯😎💯💯** ! 18 | 19 | (Omg, le légendaire zombie **H4XF13LD MORRIS 💯💯😎💯💯** !!!!) 20 | 21 | Maintenant vous avez 4 zombies dans votre armée. 22 | 23 | Avant de continuer, vous avez la possibilité de renommer vos zombies en cliquant dessus. (Même si je ne vois pas pourquoi vous voudriez renommer **H4XF13LD MORRIS 💯💯😎💯💯**, c'est clairement le meilleur nom possible). 24 | 25 | ## Récapitulons : 26 | 27 | Dans cette leçon nous avons appris : 28 | 29 | - Les tokens, le standard ERC721, et les actifs/zombies échangeables 30 | - Les bibliothèques et comment s'en servir 31 | - Comment empêcher les débordements en utilisant la bibliothèque SafeMath 32 | - Commenter son code et le standard natspec 33 | 34 | Cette leçon termine le code de notre jeu Solidity ! (Pour l'instant — nous rajouterons peut-être plus de leçons). 35 | 36 | Dans les 2 prochaines leçons, nous allons voir comment déployer vos contrats et comment interagir avec en utilisant **_web3.js_** (afin que vous puissiez faire un front-end pour votre DApp). 37 | 38 | Renommez un de vos zombies si vous le souhaitez, et passez au chapitre suivant pour terminer la leçon. 39 | -------------------------------------------------------------------------------- /es/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Estructuras 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // start here 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | Algunas veces necesitas tipos de datos más complejos. Para esto Solidity proporciona **_structs_** (estructuras de datos): 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | Las estructuras te permiten crear tipos de datos más complejos que tienen varias propiedades. 46 | 47 | > Nota: acabamos de introductir un nuevo tipo de dato `string`, que se usan para cadenas de texto UTF-8 de longitud arbitraria. Ejemplo: `string greeting = "¡Hola Mundo!"` 48 | 49 | # Vamos a probarlo 50 | 51 | En nuestra aplicación, vamos a querer crear unos cuantos zombies. Y los zombis tienen varias propiedades, así que es un caso perfecto para usar estructuras de datos `structs` 52 | 53 | 1. Crea un `struct` llamado `Zombie`. 54 | 55 | 2. Nuestra estructura `Zombie` tendrá dos propiedades: `name` (de tipo `string`), y `dna` (de tipo `uint`). 56 | -------------------------------------------------------------------------------- /es/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Resumen de la Lección 2 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | En la lección 1, creamos una función que recibía un nombre, lo usaba para generar un zombi aleatorio, y lo añadía a la base de datos de zombis de nuestra app guardada en la blockchain. 15 | 16 | En la Lección 2, vamos a hacer nuestra app más parecida a un juego: Vamos a hacerlo multijugador, y tambén añadiremos más diversión a la creación de zombis en vez de crearlos aleatoriamente. 17 | 18 | ¿Cómo crearemos nuevos zombis? ¡Haciendo que nuestros zombis se "alimenten" de otras formas de vida! 19 | 20 | ## Alimentando a los Zombis 21 | 22 | Cuando un zombi se alimenta, infecta al huésped con un virus. El virus convierte al huésped en un nuevo zombi que se une a tu ejército. El nuevo ADN del zombi estará calculado del ADN del anterior zombi y del ADN del huésped. 23 | 24 | ¿Y qué es lo que más les gusta a los zombis? 25 | 26 | Para saber esto... ¡Tendrás que completar la lección 2! 27 | 28 | # Vamos a probarlo 29 | 30 | A la derecha tenemos una demostración simple de la alimentación. ¡Clica en un humano para ver que pasa cuando tu zombi se alimenta! 31 | 32 | Puedes ver como el ADN del nuevo zombi está determinado por el ADN del zombi original, así como del ADN del huesped. 33 | 34 | Cuando estés preparado, clica en "Siguiente capítulo" para continuar, y vamos a empezar a hacer nuestro juego multijugador. 35 | -------------------------------------------------------------------------------- /pt/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Visão Geral da Lição 2 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | Na lição 1, nós criamos uma função que obtém um nome, e o usa para gerar um zumbi aleatório, e adiciona esse zumbi ao banco de dados do nosso aplicativo na blockchain. 15 | 16 | Na lição 2, nós iremos fazer o nosso aplicativo mais parecido com um jogo: Nós vamos fazer um jogo multi-jogador, e vamos adicionar formas mais divertidas de criar zumbis ao invés de somente gerar-los de forma aleatória. 17 | 18 | Como vamos criar novos zumbis? "Alimentando" nossos zumbis com outras formas de vida! 19 | 20 | ## Alimentação de Zumbi 21 | 22 | Quando um zumbi se alimenta, ele infecta o hospedeiro com um vírus. O Vírus então torna o hospedeiro e um novo zumbi que se junta ao seu exército. O DNA do novo zumbi será calculado a partir do DNA do zumbi anterior e do DNA do hospedeiro. 23 | 24 | E o que os nossos zumbis mais gostam de comer? 25 | 26 | Para saber... Você precisa completar a lição 2! 27 | 28 | # Vamos testar 29 | 30 | A direita uma simples demonstração de alimentação. Clique no humano e veja o que acontece quando o seu zumbi se alimenta! 31 | 32 | Você pode ver que o DNA do novo zumbi é determinado pelo DNA do zumbi original, e também o DNA do hospedeiro. 33 | 34 | Quando você estiver pronto, clique em "Next chapter" (Próximo Capítulo) para seguir, e vamos começar fazendo o nosso jogo multi-jogador. 35 | -------------------------------------------------------------------------------- /fr/1/structs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Structures 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | // commencez ici 16 | 17 | } 18 | answer: > 19 | pragma solidity ^0.4.19; 20 | 21 | 22 | contract ZombieFactory { 23 | 24 | uint dnaDigits = 16; 25 | uint dnaModulus = 10 ** dnaDigits; 26 | 27 | struct Zombie { 28 | string name; 29 | uint dna; 30 | } 31 | 32 | } 33 | --- 34 | 35 | Il est possible que vous ayez besoin d'un type de données plus complexe. Pour cela, Solidity fournit les **_structures_** (struct) : 36 | 37 | ``` 38 | struct Person { 39 | uint age; 40 | string name; 41 | } 42 | 43 | ``` 44 | 45 | Les structures vous permettent de créer des types de données plus complexes avec plusieurs propriétés. 46 | 47 | > Remarque : Nous venons d'introduire un nouveau type, `string` (Chaîne de caractères). Les chaînes de caractères sont utilisées pour les données UTF-8 de longueur arbitraire. Ex. `string greeting = "Hello world!"` 48 | 49 | # A votre tour 50 | 51 | Dans notre application, nous allons vouloir créer des zombies ! Et les zombies ont plusieurs propriétés, une structure est parfaitement adapté pour ça. 52 | 53 | 1. Créez une `struct` nommée `Zombie`. 54 | 55 | 2. Notre structure `Zombie` aura 2 propriétés : `name` (un `string`) et `dna` (un `uint`). 56 | -------------------------------------------------------------------------------- /jp/1/functions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 関数の宣言 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | struct Zombie { 16 | uint dna; 17 | string name; 18 | } 19 | 20 | Zombie[] public zombies; 21 | 22 | // ここから始めるのだ 23 | 24 | } 25 | answer: > 26 | pragma solidity ^0.4.19; 27 | 28 | 29 | contract ZombieFactory { 30 | 31 | uint dnaDigits = 16; 32 | uint dnaModulus = 10 ** dnaDigits; 33 | 34 | struct Zombie { 35 | uint dna; 36 | string name; 37 | } 38 | 39 | Zombie[] public zombies; 40 | 41 | function createZombie(string _name, uint _dna) { 42 | 43 | } 44 | 45 | } 46 | --- 47 | 48 | 関数の宣言はsolidityでは次のようになる: 49 | 50 | ``` 51 | function eatHamburgers(string _name, uint _amount) { 52 | 53 | } 54 | ``` 55 | 56 | これは`string` と `uint`という2つのパラメーターを持つ、`eatHamburgers`というファンクションだ。関数の中身は今は空にしてある。 57 | 58 | > 注:グローバル変数と区別をつけるために、関数パラメーター変数名はアンダースコア(`_`)をつけるのが通例(必須ではありません)です。このチュートリアルでは通例に従います。 59 | 60 | この関数は次のように呼び出すことが可能だ: 61 | 62 | ``` 63 | eatHamburgers("vitalik", 100); 64 | ``` 65 | 66 | # それじゃあテストするぞ 67 | 68 | アプリでゾンビを何体も作る必要がある。関数を使ってこれを実現したい。 69 | 70 | 1. `createZombie`という名前の関数を作成せよ。関数には、**__name_** (`string`)と、**__dna_** (`uint`)の、2つのパラメーターを設定せよ。 71 | 72 | 関数の中身は空で構わない - 後で中身を書いていくからな。 73 | 74 | -------------------------------------------------------------------------------- /fr/2/1-overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Aperçu de la Leçon 2 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | saveZombie: false 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: true 10 | ignoreZombieCache: true 11 | answer: 1 12 | --- 13 | 14 | Avec la Leçon 1, nous avons créé une fonction qui prend un nom, et qui l'utilise pour générer un zombie aléatoire, ce zombie est ajouté à la base de donnée de notre jeu stockée sur la blockchain. 15 | 16 | Avec la Leçon 2, nous allons modifier notre application pour qu'elle ressemble plus à un jeu : Nous allons la rendre multijoueur, et nous allons aussi ajouter des manières plus amusantes de créer des zombies, au lieu de les générer juste aléatoirement. 17 | 18 | Comment allons nous créer de nouveaux zombies ? En faisant manger d'autres formes de vie à nos zombies ! 19 | 20 | 21 | ## Alimentation des zombies 22 | 23 | Quand un zombie mange, il infecte l'hôte avec un virus. Le virus transforme l'hôte en un nouveau zombie qui va rejoindre votre armée. L'ADN du nouveau zombie va être calculée à partir de l'ADN du zombie et de l'ADN de l'hôte. 24 | 25 | Et qu'est ce que les zombie préfèrent manger ? 26 | 27 | Pour le savoir... Vous allez devoir finir la Leçon 2 ! 28 | 29 | 30 | # A votre tour 31 | 32 | Il y a un petit exemple à droite. Cliquez sur un humain pour voir ce qu'il arrive quand votre zombie le mange ! 33 | 34 | Vous pouvez voir que l'ADN du nouveau zombie est déterminée par l'ADN de votre zombie et celui de l'hôte. 35 | 36 | Quand vous êtes prêt, cliquez sur "Prochain Chapitre" et nous allons rendre ce jeu multijoueur. 37 | -------------------------------------------------------------------------------- /es/5/14-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Wrapping It Up 3 | actions: ['checkAnswer', 'hints'] 4 | requireLogin: true 5 | skipCheckAnswer: true 6 | material: 7 | saveZombie: false 8 | zombieDeck: 9 | zombie: 10 | lesson: 5 11 | hideSliders: true 12 | answer: 1 13 | --- 14 | 15 | ¡Felicidades! Eso concluye la Lección 5. 16 | 17 | Como recompensa. ¡Te transferimos tu propio zombi de nivel 10 **H4XF13LD MORRIS 💯💯😎💯💯**! 18 | 19 | (OMG, el legendario zombi **H4XF13LD MORRIS 💯💯😎💯💯** !!!!111) 20 | 21 | Ahora tienes 4 zombies en tu ejército. 22 | 23 | Antes de seguir adelante, tienes la opción de cambiar el nombre de cualquiera de ellos si lo deseas haciendo clic en ellos a la derecha y escribiendo un nuevo nombre. (Aunque no sé por qué querrías renombrar **H4XF13LD MORRIS 💯💯😎💯💯**, claramente es el mejor nombre de la historia). 24 | 25 | ## Recapitulemos: 26 | 27 | En esta lección aprendimos sobre: 28 | 29 | - Tokens, el estándar ERC721, y comerciar con activos/zombies. 30 | - Librerias y cómo usarlas. 31 | - Cómo prevenir desbordamientos por exceso (overflows) y por defecto (underflows) usando la librería SafeMath. 32 | - Comentar tu código y el estándar natspec. 33 | 34 | ¡Esta lección concluye el código en Solidity de nuestro juego! (Por ahora, podemos añadir aún más lecciones en el futuro). 35 | 36 | En las próximas 2 lecciones, vamos a ver cómo desplegar sus contratos e interactuar con ellos usando ***web3.js*** (para que pueda construir un front-end para su DApp). 37 | 38 | Continúa y renombra cualquiera de tus zombies si lo deseas, luego pasa al siguiente capítulo para completar la lección. 39 | -------------------------------------------------------------------------------- /ko/1/functions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 함수 선언 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | struct Zombie { 16 | uint dna; 17 | string name; 18 | } 19 | 20 | Zombie[] public zombies; 21 | 22 | // 여기서 시작 23 | 24 | } 25 | answer: > 26 | pragma solidity ^0.4.19; 27 | 28 | 29 | contract ZombieFactory { 30 | 31 | uint dnaDigits = 16; 32 | uint dnaModulus = 10 ** dnaDigits; 33 | 34 | struct Zombie { 35 | uint dna; 36 | string name; 37 | } 38 | 39 | Zombie[] public zombies; 40 | 41 | function createZombie(string _name, uint _dna) { 42 | 43 | } 44 | 45 | } 46 | --- 47 | 48 | 솔라디티에서 함수 선언은 다음과 같이 하네: 49 | 50 | ``` 51 | function eatHamburgers(string _name, uint _amount) { 52 | 53 | } 54 | ``` 55 | 56 | 이 함수는 `eatHamburgers`라는 함수로, `string`과 `uint` 2개의 인자를 전달받고 있군. 현재로선 함수의 내용이 비어 있네. 57 | 58 | > 참고: 함수 인자명을 언더바(`_`)로 시작해서 전역 변수와 구별하는 것이 관례이네 (의무는 아님). 본 튜토리얼 전체에서 이 관례를 따를 것이네. 59 | 60 | 이 함수를 다음과 같이 호출할 수 있지: 61 | 62 | ``` 63 | eatHamburgers("vitalik", 100); 64 | ``` 65 | 66 | # 직접 해보기 67 | 68 | 우리 앱에서 좀비들을 생성할 수 있을 필요가 있을 거네. 이를 위한 함수를 생성해 보세. 69 | 70 | 1. `createZombie`라는 함수를 생성한다. 이 함수는 다음 2개의 인자를 전달받아야 한다: **__name_** (`string`형)과 **__dna_** (`uint`형). 71 | 72 | 함수의 내용은 지금으로선 비어 두면 되네. 나중에 채울 것이니까. 73 | -------------------------------------------------------------------------------- /zh/1/arrays.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 数组 3 | actions: ['答案', '提示'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | struct Zombie { 16 | string name; 17 | uint dna; 18 | } 19 | 20 | // 这里开始 21 | 22 | } 23 | answer: > 24 | pragma solidity ^0.4.19; 25 | 26 | 27 | contract ZombieFactory { 28 | 29 | uint dnaDigits = 16; 30 | uint dnaModulus = 10 ** dnaDigits; 31 | 32 | struct Zombie { 33 | string name; 34 | uint dna; 35 | } 36 | 37 | Zombie[] public zombies; 38 | 39 | } 40 | --- 41 | 42 | 如果你想建立一个集合,可以用 **_数组_**这样的数据类型. Solidity 支持两种数组: **_静态_** 数组和**_动态_** 数组: 43 | 44 | ``` 45 | // 固定长度为2的静态数组: 46 | uint[2] fixedArray; 47 | // 固定长度为5的string类型的静态数组: 48 | string[5] stringArray; 49 | // 动态数组,长度不固定,可以动态添加元素: 50 | uint[] dynamicArray; 51 | ``` 52 | 53 | 你也可以建立一个 **_结构体_**类型的数组 例如,上一章提到的 `Person`: 54 | 55 | ``` 56 | Person[] people; // dynamic Array, we can keep adding to it 57 | ``` 58 | 59 | 记住:状态变量被永久保存在区块链中。所以在你的合约中创建动态数组来保存成结构的数据是非常有意义的。 60 | 61 | ## 公共数组 62 | 63 | 你可以定义 `public` 数组, Solidity 会自动创建 **_getter_** 方法. 语法如下: 64 | 65 | ``` 66 | Person[] public people; 67 | ``` 68 | 69 | 其它的合约可以从这个数组读取数据(但不能写入数据),所以这在合约中是一个有用的保存公共数据的模式。 70 | 71 | # 实战演习 72 | 73 | 为了把一个僵尸部队保存在我们的APP里,并且能够让其它APP看到这些僵尸,我们需要一个公共数组。 74 | 75 | 1. 创建一个数据类型为 `Zombie` 的结构体数组,用 `public` 修饰,命名为:`zombies`. 76 | -------------------------------------------------------------------------------- /en/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: State Variables & Integers 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | //start here 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | Great job! Now that we've got a shell for our contract, let's learn about how Solidity deals with variables. 27 | 28 | **_State variables_** are permanently stored in contract storage. This means they're written to the Ethereum blockchain. Think of them like writing to a DB. 29 | 30 | ##### Example: 31 | ``` 32 | contract Example { 33 | // This will be stored permanently in the blockchain 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | In this example contract, we created a `uint` called `myUnsignedInteger` and set it equal to 100. 39 | 40 | ## Unsigned Integers: `uint` 41 | 42 | The `uint` data type is an unsigned integer, meaning **its value must be non-negative**. There's also an `int` data type for signed integers. 43 | 44 | > Note: In Solidity, `uint` is actually an alias for `uint256`, a 256-bit unsigned integer. You can declare uints with less bits — `uint8`, `uint16`, `uint32`, etc.. But in general you want to simply use `uint` except in specific cases, which we'll talk about in later lessons. 45 | 46 | # Put it to the test 47 | 48 | Our Zombie DNA is going to be determined by a 16-digit number. 49 | 50 | Declare a `uint` named `dnaDigits`, and set it equal to `16`. 51 | -------------------------------------------------------------------------------- /no/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Status variabler og integers 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | //start her 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | Godt jobbet! Nå som vi har laget et skjellett til kontrakten, la oss lære om hvordan Solidity jobber med variabler. 27 | 28 | **_Status variabler_**er permanent lagret i kontrakt-lagringsplass. Dette betyr at de blir lagret i Ethereum blockchain-en. Tenk på dem som om du lagrer til en database. 29 | 30 | ##### Eksempel: 31 | ``` 32 | contract Example { 33 | // Dette blir lagret direkte til blockchainen 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | I denne eksempel kontrakten har vi laget en `uint` kalt `myUnsignedInteger` som er satt til 100. 39 | 40 | ## Usignert Integers: `uint` 41 | 42 | `uint` datatypen er en usignert integer, som betyr **verdien må være positiv**. Det finnes også en `int` data type for signerte integers. 43 | 44 | > Noter: I Solidity, er `uint` faktisk et synonym for `uint256`, en 256-bit usignert integer. du kan definere uints med færre bits — `uint8`, `uint16`, `uint32`, etc.. Men du vil som oftest bruke `uint` med unntak i spesielle tilfeller, som vi kommer til å snakke mer om i senere leksjoner. 45 | 46 | # Test det 47 | 48 | Zombie DNA-et kommer til å bli fastslått av et 16-sifret nummer. 49 | 50 | Deklarer en `uint` kalt `dnaDigits`, og sett den lik `16`. 51 | -------------------------------------------------------------------------------- /th/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: State Variables & Integers 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | //start here 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | ยอดเยี่ยม! ตอนนี้เราก็จะได้ส่วน shell ของ contractแล้ว ต่อจากนี้เราก็จะมาเรียนรู้กันว่า Solidity จะจัดการกับตัวแปรต่างๆ ได้อย่างไรบ้าง 27 | 28 | **_State variables_** จะถูกจัดเก็บถาวรลงในส่วนจัดเก็บของ contract ซึ่งนั่นก็หมายความว่ามันก็จะถูกเขียนลงในบล็อคเชนของ Ethereum เช่นกัน 29 | 30 | ##### ตัวอย่าง: 31 | ``` 32 | contract Example { 33 | // ในส่วนนี้จะถูกจัดเก็บถาวรลงในบล็อคเชน 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | ในตัวอย่างของ contract เราจะสร้าง `uint` โดยใช้ชื่อว่า `myUnsignedInteger` และตั้งให้มีค่าเท่ากับ 100 39 | 40 | ## Unsigned Integers: `uint` 41 | 42 | ข้อมูลชนิด `uint` หรือ unsigned integer มีความหมายว่า**ค่าของมันจะต้องไม่ติดลบ** ซึ่งนอกจากนี้ก็ยังมีข้อมูลชนิด int สำหรับ signed integers เช่นกัน 43 | 44 | > โน้ต: ใน Solidity นั้น `uint` จริงๆ แล้วก็คือนามแฝงสำหรับ `uint256` หรือ 256-bit unsigned integer นั่นเอง คุณสามารถประกาศข้อมูล uints เป็นจำนวนบิทที่น้อยกว่าได้ เช่น `uint8`, `uint16`, `uint32` เป็นต้น แต่โดยปกติแล้วก็จะใช้แค่ `uint` เท่านั้น เว้นเพียงแต่ในบางกรณีซึ่งเราจะกล่าวในบทต่อๆ ไป 45 | 46 | # ทดสอบ 47 | 48 | Zombie DNA ของเรานั้นจะถูกกำหนดโดยตัวเลขจำนวน 16 ตัว 49 | 50 | ประกาศข้อมูลชนิด `uint` โดยใช้ชื่อว่า `dnaDigits` และตั้งให้มีค่าเท่ากับ `16` 51 | -------------------------------------------------------------------------------- /tr/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hal Değişkenleri & Tam Sayılar 3 | actions: ['cevapKontrol', 'ipuçları'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | //start here 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | Aferin! Şimdi kontratımız için bir iskelet bulduk, hadi Solidity'nin değişkenlerle nasıl iş yaptığını öğrenelim. 27 | 28 | **_Hal_değişkenleri_** kontrat deposunda kalıcı olarak depolanır. Bu Ethereum blok zinciri için yazıldığı anlamına gelir. Onları bir veritabanına yazmak gibi düşünün. 29 | 30 | ##### Örnek: 31 | ``` 32 | contract Example { 33 | // Bu kalıcı olarak blok zincirinde depolanacak 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | Bu örnek kontratta, `myUnsignedInteger` denilen bir `uint` oluşturduk ve 100'e eşit olarak ayarladık. 39 | 40 | ## İşaretsiz Tam Sayılar: `uint` 41 | 42 | `uint` veri türü **değeri negatif olmaması gereken** bir işaretsiz tam sayıdır. Ayrıca işaretli tam sayılar için bir `int` veri türü de vardır. 43 | 44 | > Not: Solidity'de, `uint` 256-bit işaretsiz bir tam sayı olan`uint256` için aslında bir sahte isimdir. Daha az bits ile uintleri ilan edebilirsiniz — `uint8`, `uint16`, `uint32`, vs.. Ama genelde sonraki derslerde konuşacağımız özel durumlar dışında basitçe `uint` kullanmak istersiniz. 45 | 46 | # Teste koy 47 | 48 | Zombi DNA'mız 16 haneli bir sayı tarafından belirlenecek. 49 | 50 | `dnaDigits` isimli bir `uint` ilan et ve `16`ya eşit olacak şekilde ayarla. 51 | -------------------------------------------------------------------------------- /ru/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Переменные состояния и целые числа 3 | actions: ['Проверить', 'Подсказать'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | //Начало здесь 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | Отличная работа! Теперь, когда у нас есть оболочка контракта, мы можем изучить, как Solidity работает с переменными. 27 | 28 | **_Переменные состояния_** записываются в хранилище контракта. Это означает, что они сохраняются в блокчейне Ethereum, как в базе данных. 29 | 30 | ##### Пример: 31 | ``` 32 | contract Example { 33 | // Контракт навсегда сохранен в блокчейне 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | В этом примере контракта мы создали `uint` под названием `myUnsignedInteger` и присвоили ему значение 100. 39 | 40 | ## Целые числа без знака: `uint` 41 | 42 | Тип данных `uint` — это целые числа без знака, то есть **их значение не может быть отрицательным**. Еще есть тип данных `int` для целых чисел со знаком. 43 | 44 | > Примечание: в Solidity `uint` используют как синоним для `uint256`, 256-битного целого числа без знака. Можно задать uint с меньшим количество битов — `uint8`, `uint16`, `uint32` и.т.д. Но обычно используют просто `uint`, кроме особенных случаев, о которых мы поговорим далее. 45 | 46 | # Проверь себя 47 | 48 | ДНК зомби будет определяться номером из 16 цифр. 49 | 50 | Задай переменную состояния `uint` под названием `dnaDigits` (номер ДНК) и установи ее значение равным `16`. 51 | -------------------------------------------------------------------------------- /zh/1/functions2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 私有 / 公共函数 3 | actions: ['答案', '提示'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | struct Zombie { 16 | string name; 17 | uint dna; 18 | } 19 | 20 | Zombie[] public zombies; 21 | 22 | function createZombie(string _name, uint _dna) { 23 | zombies.push(Zombie(_name, _dna)); 24 | } 25 | 26 | } 27 | answer: > 28 | pragma solidity ^0.4.19; 29 | 30 | 31 | contract ZombieFactory { 32 | 33 | uint dnaDigits = 16; 34 | uint dnaModulus = 10 ** dnaDigits; 35 | 36 | struct Zombie { 37 | string name; 38 | uint dna; 39 | } 40 | 41 | Zombie[] public zombies; 42 | 43 | function _createZombie(string _name, uint _dna) private { 44 | zombies.push(Zombie(_name, _dna)); 45 | } 46 | 47 | } 48 | --- 49 | 50 | Solidity 定义的函数的属性默认为`公共`。 这就意味着任何一方 (或其它合约) 都可以调用你合约里的函数。 51 | 52 | 显然,不是什么时候都需要这样,而且这样的合约易于受到攻击。 所以将自己的函数定义为`私有`是一个好的编程习惯,只有当你需要外部世界调用它时才将它设置为`公共`。 53 | 54 | 如何定义一个私有的函数呢? 55 | 56 | ``` 57 | uint[] numbers; 58 | 59 | function _addToArray(uint _number) private { 60 | numbers.push(_number); 61 | } 62 | ``` 63 | 64 | 这意味着只有我们合约中的其它函数才能够调用这个函数,给 `numbers` 数组添加新成员。 65 | 66 | 可以看到,在函数名字后面使用关键字 `private` 即可。和函数的参数类似,私有函数的名字用(`_`)起始。 67 | 68 | # 实战演习 69 | 70 | 我们合约的函数 `createZombie` 的默认属性是公共的,这意味着任何一方都可以调用它去创建一个僵尸。 咱们来把它变成私有吧! 71 | 72 | 1. 变 `createZombie` 为私有函数,不要忘记遵守命名的规矩哦! 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CryptoZombies - Content Localization 2 | 3 | This repository is used to translate CryptoZombies to other languages. 4 | 5 | The source content that should be used for all translations is in the `en` directory. 6 | 7 | ``` 8 | en/ 9 | 1/ - content of Lesson 1 10 | ... 11 | N/ - content of Lesson N 12 | index.json - strings used in the UI 13 | share-template-msgs.json - strings used on the share page 14 | ``` 15 | 16 | Strings in `index.json` and `share-template-msgs.json` can contain parameters, 17 | these will be injected before the strings are displayed to the user. Parameters 18 | that are present in the source strings may appear in any position in the 19 | translated strings, or omitted entirely if it makes sense to do so. 20 | 21 | >NOTE: The syntax used to represent parameters differs between the two `.json` 22 | > files. In `index.json` parameters are specified using `{parameterName}`, 23 | > while in `share-template-msgs.json` parameters are specified using 24 | > `{{ .ParameterName }}`. 25 | 26 | ## Localizing for a new language 27 | 1. Create a new branch off `master`. 28 | 2. Create a new folder named after the locale code, e.g. `jp` (for Japanese), `zh` (for Chinese). 29 | 3. Translate the content. 30 | 4. Add `index.ts` to the new folder. 31 | 5. Update `index.ts` in the root folder. 32 | 6. Submit a PR against `master`. 33 | 34 | ## Fixing Source Content or Localized Content 35 | 1. Create a new branch off `master`. 36 | 2. Fix fix fix. 37 | 3. Submit a PR against `master`. 38 | 39 | 40 | 41 | ## License 42 | 43 | Contributors must assign copyright back to Loom Network for any contributions they make. 44 | Loom Network retains ownership of any derivative work created from original content. -------------------------------------------------------------------------------- /no/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Kontrakter" 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. Legg til solidity versjon her 9 | 10 | //2. Lag kontrakt her 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | Start med det absolutt grunnleggende: 21 | 22 | Solidity's er innkapslet av **contracts**. En `contract` er en fundamental grunnsten i Ethereum applikasjoner — alle variabler og funksjoner tilhører en kontrakt, og dette vil være startpunktet for alle dine prosjekter. 23 | 24 | En tom kontrakt kalt `HelloWorld` vil se slik ut: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Versjon Pragma 33 | 34 | Alle solidity dokumenter bør starte med "version pragma" — en deklararsjon av versjonen til Solidity kompilatoren skal bruke. Dette er for å unngå problemer med fremtidige kompilator-versjoner som potensielt kan bryte koden din. 35 | 36 | Det ser slik ut: `pragma solidity ^0.4.19;` (fordi den nyeste versjonen av Solidity i skrivende stund er 0.4.19). 37 | 38 | Putt alt sammen og du har en et skjellett til et prosjekt — det første du kommer til å skrive hver gang du lager et nytt prosjekt. 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # Test det 49 | 50 | For å lage Zombie-ene våre, la oss lage en base-kontrakt kalt `ZombieFactory`. 51 | 52 | 1. I boksen til høyre, gjør det slik at solidity bruker versjon `0.4.19`. 53 | 54 | 2. Lag en tom kontrakt kalt `ZombieFactory`. 55 | 56 | Når du er ferdig, klikk "check answer" nedenfor. Hvis du sitter fast kan du klikke på "hint". 57 | -------------------------------------------------------------------------------- /pl/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Zmienne Stanu & Integers 3 | actions: ['sprawdźOdpowiedź', 'podpowiedzi'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | // zacznij tutaj 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | Dobra robota! Teraz kiedy mamy już podstawowy kontrakt , możemy nauczyć się jak Solidity obchodzi się ze zmiennymi. 27 | 28 | **_Zmienne stanu_** są permanętnie zapisywane w pamięci kontraktu. Znaczy to mniej więcej tyle, że są zapisane w blockchainie Ethereum. Możesz myśleć o tym jak o zapisywaniu do bazy danych. 29 | 30 | ##### Przykład: 31 | ``` 32 | contract Example { 33 | // To zostanie na zawsze zapisane w blockchainie 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | W tym przykładowym kontrakcie, stworzyliśmy `uint` o nazwie `myUnsignedInteger` i ustawiliśmy jej wartość na 100. 39 | 40 | ## Liczby naturalne: `uint` 41 | 42 | Zmienna typu `uint` jest liczbą naturalną, to oznacza że, **jej wartość musi być większ od zera**. Istnieje równiez typ `int` przeznaczony dla liczb całkowitych. 43 | 44 | > Notatka: W Solidity, `uint` jest aliasem dla `uint256`, 256 bitową liczbą naturalną. Mozesz zadeklarować uints z mniejszą ilością bitów — `uint8`, `uint16`, `uint32`, itd. Najczęściej będziesz uzywał `uint` z wyjątkiem specyficznych sytuacji, o których opowiemy w następnych lekcjach. 45 | 46 | # Zadanie do wykonania 47 | 48 | DNA naszego zombie zależy od 16 cyfrowego numeru. 49 | 50 | Zadeklaruj `uint` o nazwie `dnaDigits`, oraz ustaw jego wartość na `16`. 51 | -------------------------------------------------------------------------------- /jp/1/arrays.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 配列 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | struct Zombie { 16 | string name; 17 | uint dna; 18 | } 19 | 20 | // start here 21 | 22 | } 23 | answer: > 24 | pragma solidity ^0.4.19; 25 | 26 | 27 | contract ZombieFactory { 28 | 29 | uint dnaDigits = 16; 30 | uint dnaModulus = 10 ** dnaDigits; 31 | 32 | struct Zombie { 33 | string name; 34 | uint dna; 35 | } 36 | 37 | Zombie[] public zombies; 38 | 39 | } 40 | --- 41 | 42 | 何かのコレクションを作りたければ、**_配列_**を利用するのだ。Solidityには2種類の配列が用意されている:**_固定長_**配列と**_可変長_**配列だ: 43 | 44 | ``` 45 | // 2要素の固定長の配列の場合: 46 | uint[2] fixedArray; 47 | // 別の固定長配列の例。5つの文字列を格納できる: 48 | string[5] stringArray; 49 | // 可変長配列 - 決まったサイズはないので、格納し続けることができるぞ: 50 | uint[] dynamicArray; 51 | ``` 52 | 53 | **_構造体_**の配列も作れるぞ。前のチャプターの `Person` 構造体を例にすると: 54 | 55 | ``` 56 | Person[] people; // このように可変長配列で書ける。さらに追加し続けることもできるぞ。 57 | ``` 58 | 59 | 状態変数は永久にブロックチェーン上に格納されると話したことを覚えているか?こういう構造体の可変長配列は、データベースのように使えるから、コントラクトの構造データを格納する時に便利だ。 60 | 61 | ## パブリックの配列 62 | 63 | 配列を`public`で宣言すれば、Solidityが自動的に**_getter_**メソッドを作成するぞ。コードの書き方はこうだ: 64 | 65 | ``` 66 | Person[] public people; 67 | ``` 68 | 69 | 他のコントラクトもこの配列を読める(但し、書き込めない)ぞ。こういう性質を持っているから、コントラクトの公開データを格納するときに便利に使えるパターンとして覚えておくように。 70 | 71 | # それではテストだ 72 | 73 | 私は自分のアプリにゾンビの軍隊を格納したいのだ。そして格納したゾンビを他のアプリに見せてやるために、公開したい。 74 | 75 | 1. パブリックな`Zombie`**_構造体_**の配列を作り、名前を`zombies`とせよ。 76 | -------------------------------------------------------------------------------- /zh/2/14-wrappingitup.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 放在一起 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | saveZombie: true 6 | zombieBattle: 7 | zombie: 8 | lesson: 1 9 | humanBattle: false 10 | hideSliders: true 11 | answer: 1 12 | --- 13 | 14 | 至此,你已经学完第二课了! 15 | 16 | 查看下→_→的演示,看看他们怎么运行起来得吧。继续,你肯定等不及看完这一页😉。点击小猫,攻击!看到你斩获一个新的小猫僵尸了吧! 17 | 18 | ## JavaScript 实现 19 | 20 | 我们只用编译和部署 `ZombieFeeding`,就可以将这个合约部署到以太坊了。我们最终完成的这个合约继承自 `ZombieFactory`,因此它可以访问自己和父辈合约中的所有 public 方法。 21 | 22 | 我们来看一个与我们的刚部署的合约进行交互的例子, 这个例子使用了 JavaScript 和 web3.js: 23 | 24 | ``` 25 | var abi = /* abi generated by the compiler */ 26 | var ZombieFeedingContract = web3.eth.contract(abi) 27 | var contractAddress = /* our contract address on Ethereum after deploying */ 28 | var ZombieFeeding = ZombieFeedingContract.at(contractAddress) 29 | 30 | // 假设我们有我们的僵尸ID和要攻击的猫咪ID 31 | let zombieId = 1; 32 | let kittyId = 1; 33 | 34 | // 要拿到猫咪的DNA,我们需要调用它的API。这些数据保存在它们的服务器上而不是区块链上。 35 | // 如果一切都在区块链上,我们就不用担心它们的服务器挂了,或者它们修改了API, 36 | // 或者因为不喜欢我们的僵尸游戏而封杀了我们 37 | let apiUrl = "https://api.cryptokitties.co/kitties/" + kittyId 38 | $.get(apiUrl, function(data) { 39 | let imgUrl = data.image_url 40 | // 一些显示图片的代码 41 | }) 42 | 43 | // 当用户点击一只猫咪的时候: 44 | $(".kittyImage").click(function(e) { 45 | // 调用我们合约的 `feedOnKitty` 函数 46 | ZombieFeeding.feedOnKitty(zombieId, kittyId) 47 | }) 48 | 49 | // 侦听来自我们合约的新僵尸事件好来处理 50 | ZombieFactory.NewZombie(function(error, result) { 51 | if (error) return 52 | // 这个函数用来显示僵尸: 53 | generateZombie(result.zombieId, result.name, result.dna) 54 | }) 55 | ``` 56 | # 实战演习 57 | 58 | 选择一只你想猎食的小猫。你自家僵尸的 DNA 会和小猫的 DNA 结合,生成一个新的小猫僵尸,加入你的军团! 59 | 60 | 看到新僵尸上那可爱的猫咪腿了么?这是新僵尸最后DNA中最后两位数字 `99` 的功劳! 61 | 62 | 你想要的话随时可以重新开始。捕获了一只猫咪僵尸,你一定很高兴吧!(不过你只能持有一只),继续前进到下一章,完成第二课吧! 63 | -------------------------------------------------------------------------------- /ru/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Контракты 3 | actions: ['Проверить', 'Подсказать'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. Здесь укажи версию Solidity 9 | 10 | //2. Здесь создай контракт 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | Начнем с азов: 21 | 22 | Код в Solidity помещают внутри **контрактов**. `contract` — это базовый блок для создания приложений на Ethereum. Все переменные и функции принадлежат контракту, он — отправная точка проекта. 23 | 24 | Пустой контракт под названием `HelloWorld` (Привет, мир!) будет выглядеть так: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Версия pragma 33 | 34 | Любой код на Solidity начинается с «версии pragma» — объявления, с какой версией компилятора Solidity совместим код. Это делается для того, чтобы избежать проблем с будущими версиями компилятора, содержащими изменения и потенциально способными испортить код. 35 | 36 | Вот так: `pragma solidity ^0.4.19;` (на момент написания кода используется версия Solidity 0.4.19). 37 | 38 | Соберем все вместе и получим скелет будущего контракта. Ты будешь начинать с этого каждый раз, когда создаешь новый проект: 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # Проверь себя 49 | 50 | Чтобы начать создавать армию зомби, напишем базовый контракт и назовем его `ZombieFactory` (Фабрика Зомби). 51 | 52 | 1. В поле справа обозначь версию контракта Solidity как `0.4.19`. 53 | 54 | 2. Создай пустой контракт с именем `ZombieFactory`(Фабрика Зомби). 55 | 56 | Когда закончишь, кликни «Проверить» внизу. Если затрудняешься, нажми «Подсказать». 57 | -------------------------------------------------------------------------------- /tr/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Kontratlar" 3 | actions: ['cevapKontrol', 'ipuçları'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. Solidity sürümünü buraya gir 9 | 10 | //2. Burada kontrat oluştur 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | Mutlak temeller ile başlangıç: 21 | 22 | Solidity'nin kodu **kontratlar**da kapsüllendi. Bir `contract` Ethereum uygulamalarının esas yapı taşıdır - bir kontrata ait tüm değişkenler ve fonksiyonlar, ve bu tüm projelerinizin başlangıç noktası olacak. 23 | 24 | `HelloWorld` isimli boş bir kontrat şunun gibi gözükür: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Pragma Sürümü 33 | 34 | Tüm solidity kaynak kodları bir "pragma sürümü" ile başlamalı — Solidity derleyici bu kod sürümünün bir beyanı kullanılmalı. Bu, potansiyel olarak kodunuzu bozacak değişiklikler getiren gelecekteki derleyici sürümleriyle ilgili sorunları önlemek içindir. 35 | 36 | Böyle görünüyor: `pragma solidity ^0.4.19;` (bu yazının yazıldığı tarihte solidiynin son sürümü için, 0.4.19). 37 | 38 | Bir araya getiriliyor, burada sade başlangıç kontratı var — ilk şey yeni bir projeye başladığın her zamanı yazacaksın: 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # Teste koy 49 | 50 | Zombi ordumuzu oluşturmaya başlamak için, hadi `ZombieFactory` denilen bir temel kontrat oluşturalım. 51 | 52 | 1. Sağdaki kutuda, kontratımız '0.4.19' solidity sürümünü kullanıyor yapın. 53 | 54 | 2. `ZombieFactory` denilen boş bir kontrat oluşturun. 55 | 56 | Bitirdiğinizde, aşağıda "cevabı kontrol et"e tıklayın. Takılırsanız "ipucu"na tıklayabilirsiniz. 57 | -------------------------------------------------------------------------------- /es/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Variables de Estado y Números Enteros 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | // empieza aquí 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | ¡Buen trabajo! Ahora que tenemos una capa para nuestro contrato, aprendamos cómo maneja las variables Solidity. 27 | 28 | Las **_Variables de estado_** se guardan permanentemente en el almacenamiento del contrato. Esto significa que se escriben en la cadena de bloques de Ethereum. Piensa en ellos como en escribir en una base de datos. 29 | 30 | ##### Ejemplo: 31 | ``` 32 | contract Example { 33 | // Esto se guardará permanentemente en la cadena de bloques 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | En este contrato de ejemplo, hemos creado un `uint` llamado `myUnsignedInteger` y le hemos dado el valor 100. 39 | 40 | ## Enteros sin Signo: `uint` 41 | 42 | El tipo de dato `uint` es un entero sin signo, esto es **su valor siempre debe ser no-negativo**. Hay también un tipo de dato `int` para números enteros con signo. 43 | 44 | > Nota: En Solidity, `uint` es realmente un alias para `uint256`, un número entero de 256-bits. Puedes declarar uints con menos bits — `uint8`, `uint16`, `uint32`, etc.. Pero por lo general usaremos `uint` excepto en casos específicos, de los que hablaremos en otras lecciones más adelante. 45 | 46 | # Vamos a probarlo 47 | 48 | El ADN de nuestro Zombi va a estar determinado por un número de 16 dígitos. 49 | 50 | Declara una variable de tipo `uint` llamada `dnaDigits`, y asígnale el valor `16`. 51 | -------------------------------------------------------------------------------- /fr/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Variables d'état et entiers 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | // commencez ici 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | Bien joué ! Maintenant que nous avons une structure pour notre contrat, voyons voir comment Solidity gère les variables. 27 | 28 | **_Les variables d'état_** sont stockées de manière permanente dans le stockage du contrat. Cela signifie qu'elles sont écrites dans la blockchain Ethereum. C'est comme écrire dans une base de données. 29 | 30 | ##### Exemple: 31 | ``` 32 | contract Example { 33 | // Cela sera stocké de manière permanente dans la blockchain. 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | Dans cet exemple de contrat, nous avons créé un `uint` appelé `myUnsignedInteger` qui a pour valeur 100. 39 | 40 | ## Entiers non signés : `uint` 41 | 42 | Le type de données `uint` est un entier non signé, cela veut dire que **sa valeur doit être non négative**. Il existe aussi un type de données `int` pour les entiers signés. 43 | 44 | > Remarque: En Solidity, `uint` est en fait un alias pour` uint256`, un entier non signé de 256 bits. Vous pouvez déclarer des uints avec moins de bits - `uint8`,` uint16`, `uint32`, etc. Mais en général il est plus simple d'utiliser `uint` sauf dans des cas spécifiques que nous aborderons dans les leçons suivantes. 45 | 46 | 47 | # A votre tour 48 | 49 | Notre ADN Zombie va être déterminé par un nombre à 16 chiffres. 50 | 51 | Déclarez un `uint` nommé `dnaDigits` ayant pour valeur `16`. 52 | -------------------------------------------------------------------------------- /en/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contracts" 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. Enter solidity version here 9 | 10 | //2. Create contract here 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | Starting with the absolute basics: 21 | 22 | Solidity's code is encapsulated in **contracts**. A `contract` is the fundamental building block of Ethereum applications — all variables and functions belong to a contract, and this will be the starting point of all your projects. 23 | 24 | An empty contract named `HelloWorld` would look like this: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Version Pragma 33 | 34 | All solidity source code should start with a "version pragma" — a declaration of the version of the Solidity compiler this code should use. This is to prevent issues with future compiler versions potentially introducing changes that would break your code. 35 | 36 | It looks like this: `pragma solidity ^0.4.19;` (for the latest solidity version at the time of this writing, 0.4.19). 37 | 38 | Putting it together, here is a bare-bones starting contract — the first thing you'll write every time you start a new project: 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # Put it to the test 49 | 50 | To start creating our Zombie army, let's create a base contract called `ZombieFactory`. 51 | 52 | 1. In the box to the right, make it so our contract uses solidity version `0.4.19`. 53 | 54 | 2. Create an empty contract called `ZombieFactory`. 55 | 56 | When you're finished, click "check answer" below. If you get stuck, you can click "hint". 57 | -------------------------------------------------------------------------------- /ko/1/arrays.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 배열 3 | actions: ['정답 확인하기', '힌트 보기'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | struct Zombie { 16 | string name; 17 | uint dna; 18 | } 19 | 20 | // 여기서 시작 21 | 22 | } 23 | answer: > 24 | pragma solidity ^0.4.19; 25 | 26 | 27 | contract ZombieFactory { 28 | 29 | uint dnaDigits = 16; 30 | uint dnaModulus = 10 ** dnaDigits; 31 | 32 | struct Zombie { 33 | string name; 34 | uint dna; 35 | } 36 | 37 | Zombie[] public zombies; 38 | 39 | } 40 | --- 41 | 42 | 어떤 것의 모음집이 필요할 때 **_배열_**을 사용할 수 있네. 솔리디티에는 **_정적_** 배열과 **_동적_** 배열이라는 두 종류의 배열이 있지: 43 | 44 | ``` 45 | // 2개의 원소를 담을 수 있는 고정 길이의 배열: 46 | uint[2] fixedArray; 47 | // 또다른 고정 배열으로 5개의 스트링을 담을 수 있다: 48 | string[5] stringArray; 49 | // 동적 배열은 고정된 크기가 없으며 계속 크기가 커질 수 있다: 50 | uint[] dynamicArray; 51 | ``` 52 | 53 | **_구조체_**의 배열을 생성할 수도 있다. 이전 챕터의 `Person` 구조체를 이용하면: 54 | 55 | ``` 56 | Person[] people; // 이는 동적 배열로, 원소를 계속 추가할 수 있다. 57 | ``` 58 | 59 | 상태 변수가 블록체인에 영구적으로 저장될 수 있다는 걸 기억하나? 그러니 이처럼 구조체의 동적 배열을 생성하면 마치 데이터베이스처럼 컨트랙트에 구조화된 데이터를 저장하는 데 유용하네. 60 | 61 | ## Public 배열 62 | 63 | `public`으로 배열을 선언할 수 있지. 솔리디티는 이런 배열을 위해 **_getter_** 메소드를 자동적으로 생성하지. 구문은 다음과 같네: 64 | 65 | ``` 66 | Person[] public people; 67 | ``` 68 | 69 | 그러면 다른 컨트랙트들이 이 배열을 읽을 수 있게 되지 (쓸 수는 없네). 이는 컨트랙트에 공개 데이터를 저장할 때 유용한 패턴이지. 70 | 71 | # 직접 해보기 72 | 73 | 우리 앱에 좀비 군대를 저장하고 싶네. 그리고 우리 좀비들을 다른 앱에 자랑하고 싶네. 그러니 좀비 군대 저장소를 public으로 해야 하네. 74 | 75 | 1. `Zombie` **_구조체_**의 public 배열을 생성하고 이름을 `zombies`로 한다. 76 | -------------------------------------------------------------------------------- /pt/1/datatypes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Variáveis de Estado & Inteiros 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | // comece aqui 13 | 14 | } 15 | answer: > 16 | pragma solidity ^0.4.19; 17 | 18 | 19 | contract ZombieFactory { 20 | 21 | uint dnaDigits = 16; 22 | 23 | } 24 | --- 25 | 26 | Bom trabalho! Agora que temos a casca para os nossos contratos, vamos aprender sobre como trabalhar com variáveis em Solidity. 27 | 28 | **_Variáveis de Estado_** são permanentemente gravadas no armazenamento do contrato. Isso quer dizer que são escritas na blockchain do Ethereum. Pense nelas como escrever em um banco de dados. 29 | 30 | ##### Exemplo: 31 | ``` 32 | contract Example { 33 | // Isto vai ser gravado permanentemente na blockchain 34 | uint myUnsignedInteger = 100; 35 | } 36 | ``` 37 | 38 | Neste exemplo de contrato, nós criamos uma variável `uint` chamada `myUnsignedInteger` e determinamos o valor igual a 100. 39 | 40 | ## Inteiros Sem Sinal: `uint` 41 | 42 | O tipo de dado `uint` é um número inteiro sem sinal, isso significa que **este valor não pode ser negativo**. Também há um tipo de dado `int` para números inteiros com sinal de negativo. 43 | 44 | > Nota: Em Solidity, `uint` é na verdade um apelido para o tipo `uint256`, um número inteiro sem sinal de 256-bits. Você pode declarar uints com menos bits - `uint8`, `uint16`, `uint32`, etc.. Mas em geral você quer simplesmente usar `uint` exceto em casos específicos, algo de que iremos falar mais tarde. 45 | 46 | # Vamos testar 47 | 48 | Nosso DNA Zumbi vai ser determinado por um número de 16-dígitos. 49 | 50 | Declare um `uint` chamado `dnaDigits`, e atribua-lhe o valor `16`. 51 | -------------------------------------------------------------------------------- /pl/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Kontrakty" 3 | actions: ['sprawdźOdpowiedź', 'podpowiedzi'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. Enter solidity version here 9 | 10 | //2. Create contract here 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | Zacznijmy od absolutnych podstaw: 21 | 22 | Kod Solidity jest enkapsulowany w **kontraktach**. Kontrakt `contract` jest podstawową konstrukcją z jakiej zbudowana jest aplikacja na Ethereum. Wszystkie zmiennne, oraz funkcje należą do kontraktu. To będzie twój punkt wyjściowy przy pisaniu wszystkich późniejszych projektów 23 | 24 | Pusty kontrakt o nazwie `HelloWorld` wygląda tak: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Version Pragma 33 | 34 | Kod źródłowy solidity powinien zaczynać się od "version pragma", czyli deklaracji wersji dla kompilera Solidity. Jest to niezbędne aby wyeliminować ewentualne przyszłe błedy jeśli zmieni się wersja kompilera. 35 | 36 | Powinno to wyglądać mniej więcej tak: `pragma solidity ^0.4.19;` ( 0.4.19 jest aktualną wersją w czasie pisania tego tutorialu). 37 | 38 | Zbierając wszystko w jedną całość, oto szkielet każdego początkowego kontraktu — pierwsza rzecz jaką powinieneś napisać, kiedy tworzysz nowy projekt: 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # Zadanie do wykonania 49 | 50 | Aby stworzyć armie zombie, stwórzmy najpierw podstawowy kontrakt o nazwie `ZombieFactory`. 51 | 52 | 1. W edytorze po prawej, spraw aby kontrakt używał wersji `0.4.19`. 53 | 54 | 2. Stwórz pusty projekt o nazwie `ZombieFactory`. 55 | 56 | Kiedy skończysz, kliknij "sprawdź odpowiedź" poniżej. Jeśli utkniesz, mozesz kliknąć "podpowiedzi". 57 | -------------------------------------------------------------------------------- /jp/1/functions2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Private / Public 関数 3 | actions: ['答え合わせ', 'ヒント'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity ^0.4.19; 9 | 10 | contract ZombieFactory { 11 | 12 | uint dnaDigits = 16; 13 | uint dnaModulus = 10 ** dnaDigits; 14 | 15 | struct Zombie { 16 | string name; 17 | uint dna; 18 | } 19 | 20 | Zombie[] public zombies; 21 | 22 | function createZombie(string _name, uint _dna) { 23 | zombies.push(Zombie(_name, _dna)); 24 | } 25 | 26 | } 27 | answer: > 28 | pragma solidity ^0.4.19; 29 | 30 | 31 | contract ZombieFactory { 32 | 33 | uint dnaDigits = 16; 34 | uint dnaModulus = 10 ** dnaDigits; 35 | 36 | struct Zombie { 37 | string name; 38 | uint dna; 39 | } 40 | 41 | Zombie[] public zombies; 42 | 43 | function _createZombie(string _name, uint _dna) private { 44 | zombies.push(Zombie(_name, _dna)); 45 | } 46 | 47 | } 48 | --- 49 | 50 | Solidityでは、関数はデフォルトで`public`になっている。要するに誰でも(別のコントラクトからでも)君のコントラクトの関数を呼び出して、実行できるということだ。 51 | 52 | これは当然愉快なことではないし、攻撃に対してコントラクトが脆弱になることになる。だから、自分が使う関数はデフォルトで`private`にして、公開しても構わない関数だけを`public`に設定するのだと、心がけておくように。 53 | 54 | では、private関数の宣言方法を教えるぞ: 55 | 56 | ``` 57 | uint[] numbers; 58 | 59 | function _addToArray(uint _number) private { 60 | numbers.push(_number); 61 | } 62 | ``` 63 | このように書くと、この関数はコントラクト内の他の関数からだけ呼び出して、`numbers`配列に格納できる。 64 | 65 | 見ればわかる通り、関数名の後に `private`とつけるのだ。関数のパラメーターと同様に、アンダースコア(`_`)で始めるのが通例だから覚えておくように。 66 | 67 | # それではテストだ 68 | 69 | 我々の`createZombie`コントラクトはデフォルトでpublicになっている。つまりだれでもコントラクトから関数を呼び出してゾンビを作れるということだ!これはあってはならないことだから、privateに変えなければならない。 70 | 71 | 1. private関数になるように、`createZombie`を編集せよ。名付けの通例を忘れるなよ! 72 | -------------------------------------------------------------------------------- /th/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contracts" 3 | actions: ['checkAnswer', 'hints'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. ระบุเวอร์ชั่นของ Solidity ตรงนี้ 9 | 10 | //2. สร้างContract ตรงนี้ 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | เริ่มต้นด้วยขั้นตอนที่ง่ายๆ ก่อน: 21 | 22 | โค้ดของ Solidity นั้นจะอยู่ในส่วนของ **contracts** โดย `contract` นั้นจะเรียกว่าเป็นบล็อคโครงสร้างพื้นฐานในแอพพลิเคชั่น Ethereum ซึ่งมีตัวแปรและฟังชั่นต่างๆ ขึ้นอยู่กับ contract ทั้งสิ้น สิ่งนี้จะเป็นจุดเริ่มต้นโปรเจคทั้งหมดทั้งมวลของคุณนั่นเอง 23 | 24 | contract ว่างๆ ซึ่งเราใช้ชื่อว่า `HelloWorld` ก็จะมีหน้าตาดังนี้: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Version Pragma 33 | 34 | ในทุกๆ โค้ดต้นฉบับของ Solidity จะต้องเริ่มต้นด้วยคำว่า “version pragma” หมายถึงการประกาศเวอร์ชั่นคอมไพล์เลอร์หรือตัวแปลภาษาของ Solidity ที่โค้ดนี้ควรใช้ ทั้งนี้ก็เพื่อป้องกันปัญหาที่โค้ดของคุณจะถูกทำลายเมื่อคอมไพล์เลอร์ในอนาคตนั้นมีการปรับเปลี่ยนไป โดยหน้าตาของขั้นตอนดังกล่าวเป็นดังนี้ : 35 | 36 | `pragma solidity ^0.4.19;` (สำหรับ Solidity เวอร์ชั่นล่าสุดขณะทำการเขียนโค้ดนี้ ซึ่งก็คือเวอร์ชั่น 0.4.19) 37 | 38 | หากนำมาวางร่วมกันกับ contract เราก็จะได้โครงสร้างเริ่มต้นว่างๆ ที่คุณจะต้องเขียนเป็นสิ่งแรกในทุกๆครั้งเมื่อสร้างโปรเจคใหม่ขึ้น: 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # ทดสอบ 49 | 50 | ในการที่จะสร้างกองทัพซอมบี้ เรามาลองสร้างฐานของ contract โดยใช้ชื่อว่า `ZombieFactory` 51 | 52 | 1. ในกล่องด้านขวาให้ระบุตามขั้นตอนที่ได้กล่าวมา เพื่อให้เวอร์ชั่นของ Solidity ที่เราจะใช้คือเวอร์ชั่น `0.40.19` 53 | 54 | 2. สร้าง contract เปล่าขึ้นมาแล้วใช้ชื่อว่า `ZombieFactory` 55 | 56 | เมื่อทำสำเร็จแล้ว ให้คลิกที่ “check answer” ด้านล่าง หรือหากขัดข้องส่วนไหนให้คลิกคำสั่ง “hint” 57 | -------------------------------------------------------------------------------- /fr/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Contrats" 3 | actions: ['vérifierLaRéponse', 'indice'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity // 1. Entrez la version de Solidity ici 9 | 10 | // 2. Créez le contrat ici 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | Commençons par les bases : 21 | 22 | Un **contrat** (contract) permet d'encapsuler du code Solidity, c'est la composante fondamentale de toutes applications Ethereum - toutes les variables et fonctions appartiennent à un contrat, et ce sera le point de départ de tous vos projets. 23 | 24 | Un contrat vide nommé `HelloWorld` ressemblerait à ceci : 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Pragma version 33 | 34 | Tout code source en Solidity doit commencer par un "pragma version" - une déclaration de la version du compilateur Solidity que ce code devra utiliser. Cela permet d'éviter d'éventuels problèmes liés aux changements introduits par des futures versions du compilateur. 35 | 36 | Cela ressemble à ça : `pragma solidity ^0.4.19;` (la dernière version de Solidity au moment de la rédaction de cet article étant 0.4.19). 37 | 38 | Pour résumer, voici un contrat de base - la première chose que vous devez écrire à chaque fois que vous commencerez un nouveau projet : 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # A votre tour 49 | 50 | Pour commencer à créer notre armée de Zombies, créons un contrat de base appelé `ZombieFactory`. 51 | 52 | 1. Dans la section à droite, définissez la version Solidity de notre contrat à `0.4.19`. 53 | 54 | 2. Créez un contrat vide appelé `ZombieFactory`. 55 | 56 | Lorsque vous avez terminé, cliquez sur "Vérifier La Réponse" ci-dessous. Si vous êtes bloqué, vous pouvez cliquer sur "Indice". 57 | -------------------------------------------------------------------------------- /pt/1/contracts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contratos 3 | actions: ['verificarResposta', 'dicas'] 4 | material: 5 | editor: 6 | language: sol 7 | startingCode: | 8 | pragma solidity //1. Enter solidity version here 9 | 10 | // 2. Crie seu contract aqui 11 | answer: > 12 | pragma solidity ^0.4.19; 13 | 14 | 15 | contract ZombieFactory { 16 | 17 | } 18 | --- 19 | 20 | Começando pelo básico do básico: 21 | 22 | O código em Solidity é encapsulado em **contratos**. Um `contract` (contrato) é um bloco de construção fundamental para aplicações em Ethereum — todas as variáveis e funções pertencem a um `contract`, e este será o ponto inicial de todos os seus projetos. 23 | 24 | Um `contract` vazio com o nome `HelloWorld` seria assim: 25 | 26 | ``` 27 | contract HelloWorld { 28 | 29 | } 30 | ``` 31 | 32 | ## Versão Pragma 33 | 34 | Todo código fonte em Solidity deve começar com um "version pragma" - uma declaração da versão do compilador Solidity que deve ser usado. Isto é para evitar problemas com futuras versões do compilador, potencialmente apresentando mudanças que possam quebrar o seu código. 35 | 36 | Irá ficar assim: `pragma solidity ^0.4.19;` (para a última versão do Solidity no momento que essa lição foi escrita, 0.4.19). 37 | 38 | Juntando tudo, a versão mais simples para começar um `contract` - aqui vai a primeira coisa que você vai escrever toda vez que começar um novo projeto. 39 | 40 | ``` 41 | pragma solidity ^0.4.19; 42 | 43 | contract HelloWorld { 44 | 45 | } 46 | ``` 47 | 48 | # Vamos testar 49 | 50 | Para começar o nosso exército Zumbi, vamos criar um contrato base chamado `ZombieFactory`. 51 | 52 | 1. Na caixa a direita, crie o nosso `contract` usando a versão do Solidity `0.4.19`. 53 | 54 | 2. Crie um `contract` vazio chamado `ZombieFactory`. 55 | 56 | Quando você terminar, clique em "Verificar Resposta" abaixo. Se você não souber como progredir, você pode clicar em "Dicas". 57 | --------------------------------------------------------------------------------