Kami berhasil mengembalikan komputer kontrol pesawat ruang angkasa Apollo. Dan sekarang, ketika kita memiliki satu-satunya contoh yang berfungsi di dunia ini, terpikir oleh saya untuk menulis kode untuk itu. Meskipun gagasan menambang bitcoin menggunakan komputer dari jauh 60-an tampak tidak masuk akal, itu patut dicoba. Menerapkan algoritma enkripsi Bitcoin dalam kode assembler menggunakan komputer 15-bit itu sulit, tetapi saya masih berhasil membuatnya bekerja. Sayangnya, komputer itu ternyata sangat lambat sehingga akan butuh selamanya untuk membentuk blok bitcoin.

Apollo / Apollo onboard control computer (AGC) dikembangkan pada 1960-an, melakukan perhitungan dan mengontrol pergerakan, navigasi, dan modul perintah dan bulan yang dikendalikan selama penerbangan di bawah program Apollo. Di era ketika ukuran komputer dapat bervariasi dari ukuran kulkas hingga ukuran ruangan, Apollo Guidance cukup kecil untuk terbang ke luar angkasa. Komputer bersejarah ini adalah salah satu yang pertama menggunakan sirkuit terintegrasi. Mesin semacam itu beratnya hampir 32 kg.

Komputer kendali pesawat ruang angkasa Apollo memainkan peran penting dalam pengembangan pengembangan perangkat lunak, yang dipimpin oleh Margaret Hamilton.
Margaret Hamilton memimpin departemen pengembangan perangkat lunak di Massachusetts Institute of Technology (MIT). Departemen ini mengembangkan perangkat lunak untuk program luar angkasa NASA Apollo.
Apollo (AGC) dilengkapi dengan sistem operasi real-time dengan multitasking kooperatif, beberapa tugas prioritas dapat dilakukan secara bersamaan, ada fungsi troubleshooting. Sebagian besar perangkat lunak dalam assembler, juru bahasa dikembangkan untuk AGC, yang memungkinkan menjalankan 5-7 mesin virtual secara bersamaan dalam dua kilobyte memori.
Cara Kerja Penambangan Bitcoin
Sama sekali bukan berita: sebagai mata uang digital terkemuka, Bitcoin telah menjadi perhatian utama selama beberapa tahun terakhir. Sistem Bitcoin dapat dianggap sebagai buku akun yang menyimpan siapa yang termasuk dalam bitcoin, ini memungkinkan Anda untuk mentransfernya dari satu pengguna ke pengguna lain. Fitur revolusioner Bitcoin adalah desentralisasi lengkap, tidak ada administrator pusat atau analognya. Sebagai gantinya, catatan didistribusikan ke ribuan mesin di Internet, dan sistem bekerja tanpa bantuan.
Ini adalah jenis jurnal di mana semua transaksi dicatat tanpa kemungkinan mengubah data apa pun, tetapi hanya penambahan mereka. Semacam salinan jurnal semacam itu terletak pada sistem semua peserta dalam jaringan ini, dan semua transaksi dan informasi mengenai sirkulasi dan akumulasi dana juga terdapat pada semua jurnal ini.
Untuk memastikan bahwa semua orang setuju dengan transaksi mana yang valid, Bitcoin menggunakan proses yang disebut penambangan - kira-kira setiap 10 menit blok transaksi yang tertunda diekstraksi, ini membuat blok ini “resmi”. Sistem Bitcoin dirancang sedemikian rupa sehingga memblokir penambangan membutuhkan sejumlah besar daya komputasi, dan ini menghilangkan "perebutan kekuasaan" oleh satu penambang. Penambang (penambang bitcoin) bersaing satu sama lain, menghasilkan triliunan “hash,” triliunan acak, hingga seseorang cukup beruntung menemukan satu mulai dari 18 nol. Hash ini membentuk blok yang berhasil dibuat, setelah itu semua orang melanjutkan untuk menambang blok berikutnya. Ide: secara tidak sengaja mendapatkan 18 nol berturut-turut sangat tidak mungkin, sehingga dibutuhkan sejumlah besar upaya sebelum seseorang berhasil. Nah, ini mirip dengan lotere, di mana penambang terus mencoba sampai seseorang "menang", mencari kode hash sebanding dengan menemukan butiran pasir tertentu di semua pasir di Bumi.
Setiap kali, setelah menambang blok, Bitcoin baru dibuat; Saat ini, penambang yang berhasil dapat menerima 12,5 Bitcoin baru (senilai $ 140.000), serta biaya transaksi. Gagasan tentang peluang mendapatkan $ 140.000 setiap 10 menit mendorong para penambang untuk membangun pusat data yang diisi dengan peralatan khusus menggunakan sejumlah besar listrik.

Diagram di atas menunjukkan apa yang sebenarnya termasuk dalam blok yang ditambang. Bagian kuning adalah header blok (yang hash), diikuti oleh transaksi yang masuk blok. Setiap blok berisi hash dari blok sebelumnya, sebagai akibatnya semua blok bergabung bersama, membentuk rantai blok. Di sebelah kanan, hash berhasil, karena dimulai dengan sejumlah besar nol.
Untuk meringkas proses penambangan: Anda mengumpulkan transaksi bitcoin baru dan membuat header, seperti yang ditunjukkan pada diagram di atas. Anda menghasilkan hash blok kriptografi. Jika, untuk beberapa kesempatan luar biasa, hasilnya dimulai dengan 18 nol, Anda mengirim blok ke jaringan Bitcoin dan “menangkan” $ 140.000 dalam bitcoin. Jika tidak, Anda sedikit mengubah judul dan coba lagi. Jika orang lain berhasil mendapatkan blokir, Anda memulai dari awal lagi dengan blok baru dan transaksi baru.
Algoritma hash Bitcoin SHA-256
Dari mana hash ini berasal? Proses penambangan Bitcoin didasarkan pada kriptografi dengan "fungsi hash", yang mengubah blok data menjadi nilai hash yang hampir acak. Algoritme hash dirancang sehingga dapat dengan mudah diimplementasikan, tetapi kriptografis dapat diandalkan: tidak ada cara yang diketahui untuk dengan cepat menemukan hash yang sukses, kecuali untuk mencoba jutaan hash menggunakan kekuatan kasar. Secara khusus, Bitcoin menggunakan fungsi hash kriptografi standar yang disebut SHA-256. Algoritma ini sederhana, tetapi dapat digunakan untuk mengenkripsi data sepenuhnya tanpa dapat diprediksi.
SHA-256 adalah fungsi satu arah untuk membuat sidik jari digital tetap-panjang (256 bit, 32 byte) dari data input hingga 2,31 exabytes (2 (bit) dalam ukuran dan merupakan kasus khusus dari algoritma dari keluarga SHA-2 dari algoritma kriptografi)
Algoritma SHA-256 dijelaskan sekitar pada halaman
kode semuFungsi hash dari keluarga SHA-2 didasarkan pada struktur Merkle - Damgard. Setelah penambahan, pesan asli dibagi menjadi beberapa blok, setiap blok menjadi 16 kata. Algoritma melewati setiap blok pesan melalui loop dengan 64 iterasi. Pada setiap iterasi, 2 kata ditransformasikan, kata-kata yang tersisa mengatur fungsi konversi. Hasil pemrosesan setiap blok ditambahkan, jumlah adalah nilai fungsi hash. Karena inisialisasi keadaan internal dilakukan dengan memproses blok sebelumnya, tidak ada cara untuk memproses blok secara paralel.

Langkah pengodean informasi, juga disebut "putaran," diulang 64 kali. Diagram di atas menunjukkan satu putaran yang mengambil delapan nilai hash 4-byte, dari A ke H, melakukan beberapa operasi, dan menghasilkan nilai baru untuk AH. Seperti yang Anda lihat dari diagram, hanya A dan E yang berubah per putaran, sementara yang lain bergeser. Namun, setelah 64 putaran, data input sepenuhnya diacak, yang mengarah ke output hash yang tidak dapat diprediksi.
Operasi di SHA-256 adalah operasi bitwise sederhana. Kolom merah di atas menunjukkan penambahan 32-bit, menghasilkan nilai baru untuk A dan E. Blok "selektif" Ch memilih bit dari F atau G berdasarkan nilai input E. Blok "total" Σ memutar dan menjumlahkan bit. Block Ma “Most” mengevaluasi bit di setiap posisi A, B dan C dan memilih nilai apa yang akan menjadi mayoritas. Nilai-nilai Kt adalah sebuah konstanta. Input masuk ke algoritma melalui nilai Wt. Operasi ini dapat dengan mudah diimplementasikan pada komputer menggunakan operasi aritmatika dan logis sederhana.
Prosesor pesawat ruang angkasa kontrol Apollo
Apollo (AGC) tidak memiliki mikroprosesor, karena mikroprosesor dibangun jauh sebelum mikroprosesor dikembangkan. Sebagai gantinya, prosesor terdiri dari sekitar 5.600 gerbang NOR.
Gerbang ini saling berhubungan untuk membuat sirkuit seperti pemicu, register, biner, logika kontrol, dan sebagainya. AGC adalah salah satu komputer pertama yang menggunakan sirkuit terintegrasi; setiap sirkuit terintegrasi berisi dua katup NOR. Komputer memiliki 24 modul logika yang mirip dengan yang di bawah ini. Setiap modul logika memiliki 120 sirkuit terpadu (240 katup NOR). Sebagai contoh, register dan ALU diimplementasikan dengan empat modul, yang masing-masing diimplementasikan 4 bit prosesor.

Arsitektur komputer tidak biasa menurut standar modern: ia menggunakan kata 15-bit bersama dengan paritas (pada waktu itu komputer sering memiliki ukuran kata yang sesuai dengan aplikasi, dan belum tentu 2). AGC hanya memiliki 2K kata dalam RAM, 36K kata dalam ROM. Permanent storage device (ROM) adalah pilihan linear dari beberapa inti yang dijahit, memori "rajutan". Komputer kontrol Apollo lambat bahkan menurut standar tahun 1960-an; dia bisa melakukan sekitar 40.000 operasi per detik. Keuntungan utama AGC adalah I / O: ia memiliki ratusan koneksi I / O dan dapat memberikan kontrol pesawat ruang angkasa waktu nyata.
Implementasi SHA-256 pada komputer navigasi Apollo
Implementasi saya terhadap algoritma hash SHA-256 mengikuti kode pseudo dengan sangat dekat. Namun, saya mengalami beberapa kesulitan karena set instruksi AGC tidak memiliki banyak fitur komputer modern. Misalnya, AGC (seperti banyak komputer tahun 1960-an) tidak memiliki tumpukan, jadi Anda harus melacak alamat pengirim untuk setiap panggilan ke subrutin.
Komplikasi lain adalah bahwa algoritma SHA-256 menggunakan angka unsigned 32-bit, sedangkan AGC menggunakan angka bertanda 15-bit, unit lama yang usang, sehingga bahkan operasi penambahan memerlukan kode yang rumit. Untuk memasukkan nomor 32-bit di AGC, saya membagi setiap kata menjadi satu fragmen 4-bit dan dua 14-bit. (Saya menggunakan fragmen 14-bit, bukan yang 15-bit, karena saya perlu menggunakan aritmatika yang tidak ditandatangani).
Masalah selanjutnya adalah memori AGC, atau lebih tepatnya ukurannya. Komputer kontrol, seperti kebanyakan komputer tahun 1960-an, menggunakan memori pada inti magnetik, setiap bit disimpan dalam cincin ferit magnet kecil. Karena memori kernel agak rumit, AGC memiliki sekitar 4 KB RAM. Skema pengalamatan AGC membuat tugas ini semakin rumit, karena hanya 256 kata yang dapat diakses jika mekanisme switching blok memori yang tidak nyaman tidak digunakan. Masalahnya adalah bahwa algoritma SHA-256 menggunakan delapan (32-bit) nilai hash, tabel konfirmasi 64-kata dan 8 kata dari nilai-nilai perantara. Hanya tiga array ini yang menggunakan 240 kata AGC, menyisakan sekitar 16 kata untuk yang lainnya (nilai sementara, alamat pengirim dari program, jumlah siklus, pointer, dll.) Saya berhasil mengurangi semuanya menjadi satu blok memori, menggunakan kembali 16 kata ini untuk berbagai tujuan, tetapi saya menghabiskan banyak waktu men-debug masalah sementara variabel itu mengambil ruang yang masih digunakan.

Sebagian besar komputer modern memiliki perintah shift / rotate khusus untuk beroperasi pada kata-kata, tetapi AGC menggunakan tiga register khusus sebagai gantinya.
Algoritma SHA-256 menggunakan banyak shift dan rotasi 32-bit, yang harus saya konversi menjadi loop menggunakan register siklik 15-bit. Meskipun operasi shift, seperti x >> 10, sepele, saya perlu menerapkan seluruh subrutin untuk menghidupkannya di pesawat ruang angkasa Apollo.

Untuk mempertahankan set instruksi dan ukuran kode kecil, ada beberapa instruksi untuk AGC dengan "efek samping" yang tidak terduga. Sebagai contoh, instruksi TS (transfer ke perangkat penyimpanan) menulis nilai ke dalam memori, yang pada awalnya adalah proses yang sederhana. Tetapi jika penambahan sebelumnya mengalami overflow (yaitu, akumulasi), TS melewatkan instruksi berikutnya dan menagih register yang terakumulasi dengan +1 atau -1. Dengan kata lain, hanya menulis nilai ke memori dapat menyebabkan lompatan dalam aliran kontrol dan perubahan kasus. Ini memungkinkan untuk memproses tanda hubung untuk
operasi aritmatika dengan akurasi yang sangat meningkat , sebagian besar komputer hanya menerapkan ini menggunakan instruksi "Tambahkan dengan tanda hubung".
Peluncuran program
Dalam video di bawah ini - program bitcoin saya berjalan di komputer kontrol pesawat ruang angkasa Apollo yang sebenarnya, hasilnya ditampilkan di DSKY kami (kependekan dari Display / Keyboard - display / keyboard). DSKY memiliki keypad numerik sederhana dengan tombol yang cukup besar untuk ditekan oleh astronot saat mengenakan sarung tangan. Komputer menampilkan hasilnya dalam angka; astronot seharusnya tahu dalam satuan apa outputnya: dalam satuan kaki, detik, derajat, dll. Kami menggunakan salinan DSKY yang dibuat oleh Karl, karena tidak ada yang membiarkan kami mengerjakan DSKY yang sebenarnya.
Komputer Apollo memiliki antarmuka pengguna yang sangat sederhana. Astronot memilih aksinya dengan menekan tombol Verb (Verb), memasukkan nomor kata kerja dan menekan Enter. Kemudian ia memilih setpoint dengan memasukkan "Noun" (Kata benda). (Para astronot memiliki kartu referensi dengan daftar semua kata kerja dan kata benda). Saya menambahkan penambangan Bitcoin sebagai Verb 65 dalam program yang disebut Borealis; Anda dapat melihat bagaimana Mike memperkenalkan Verb 65 di awal video.
Apollo membutuhkan waktu 5,15 detik untuk membuat satu hash SHA-256. Karena Bitcoin menggunakan hash ganda, tingkat hash adalah 10,3 detik. Saat ini, jaringan Bitcoin melakukan sekitar 65 EH / s (65 quintillion hash per detik). Komputer kontrol terpasang akan membutuhkan 4 × 10 ^ 23 detik untuk mendapatkan unit. Dan ini adalah jutaan kali usia alam semesta (4.3 × 10 ^ 17).
Mengingat kompleksitas astronomi dari proses penambangan, Anda mungkin bertanya-tanya bagaimana saya berhasil menambang blok. Sederhana - untuk demonstrasi ini, saya menggunakan blok yang berhasil ditambang di masa lalu sebagai masukan, khususnya, blok # 286819. Jadi, algoritma bekerja dengan cepat, tetapi karena itu adalah blok yang lama, saya tidak menghasilkan uang di sana.
Untuk mengevaluasi kinerja penambangan komputer Apollo, bandingkan dengan kinerja penambang USB ringkas. Satu perangkat seperti ini menjalankan 130 miliar hash per detik, dan biayanya kurang dari $ 70. Ini tidak sebanding dengan komputer kontrol Apollo $ 150.000. Pada suatu waktu, Apollo adalah sistem yang sangat kompak dengan konsumsi daya yang rendah, mengkonsumsi 55 watt. Penambang USB, bagaimanapun, mengkonsumsi 12 watt dan cocok dengan mudah di tangan Anda. Perbedaan besar dalam kinerja dikaitkan dengan peningkatan eksponensial dalam kecepatan komputer yang dijelaskan dalam hukum Moore, dan pada saat yang sama dengan keunggulan peralatan pengguna saat ini untuk menambang bitcoin.
Pemrograman AGC - Lalu dan Sekarang
Pada 1960-an, kode untuk komputer kontrol on-board ditulis pada kartu punch dan dirakit pada kaset menggunakan sistem perangkat lunak yang disebut YUL. Sistem ini lebih maju daripada yang mungkin diharapkan pada 1960-an, itu termasuk sistem manajemen kode sumber, dilacak dan termasuk perubahan. Untuk penerbangan, perangkat lunak dipasang pada ROM dengan pilihan linear dari inti yang berulang kali dijahit (dalam memori "rajutan"), dan kabel secara fisik melewati inti untuk 0 atau melalui inti untuk 1. Dengan kata lain, setiap inti dibuat sesuai pesanan, dan data disimpan. dalam pola kabel tenun. Ini memastikan penyimpanan ROM kepadatan tinggi yang andal, tetapi membutuhkan beberapa minggu untuk pembuatan.

Karena tidak praktis untuk menghasilkan inti tali baru untuk setiap perubahan, pendekatan yang berbeda digunakan selama pengembangan. Simulator penyimpanan inti magnetik memungkinkan untuk memuat program ke komputer terpasang dari perangkat penyimpanan eksternal. Simulator ini adalah bagian dari perangkat kontrol seukuran kulkas (di bawah gambar) - antarmuka debugging ke AGC melalui konektor diagnostik pada komputer yang terpasang. Monitor memungkinkan pemrogram untuk mengatur breakpoint, memeriksa register, dll., Menggunakan indikator dan sakelar.

Dalam kasus saya, saya menulis perangkat lunak pada laptop saya dan mengompilasinya dengan yaYUL, versi modern YUL yang ditulis oleh tim Virtual AGC. AGC, Code:: Blocks IDE, , , 1960- . AGC, . , AGC, AGC, .

Kesimpulan
SHA-256 Apollo, , 10,3 . . ; 0,67 . IBM 1960- 80 . Xerox Alto ( 1973 , Macintosh), 1,5 . , Apollo IBM , Alto.

Apollo 1973 25,4 , 150 . 200 , , , Apollo . — Apollo, .
Github ;
BITCOIN.agc . CuriousMarc
AGC , .
Terima kasih telah tinggal bersama kami. Apakah Anda suka artikel kami? Ingin melihat materi yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikannya kepada teman-teman Anda,
diskon 30% untuk pengguna Habr pada server entry-level analog unik yang kami buat untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps mulai dari $ 20 atau cara membagi server? (opsi tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).
Dell R730xd 2 kali lebih murah? Hanya kami yang memiliki
2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV dari $ 199 di Belanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mulai dari $ 99! Baca tentang
Cara Membangun Infrastruktur Bldg. kelas menggunakan server Dell R730xd E5-2650 v4 seharga 9.000 euro untuk satu sen?