У цій серії статей ми створимо спрощену криптовалюту на основі простої реалізації блокчейну в Golang менш ніж за 5 хвилин. вам потрібно спочатку встановити golang, щоб створити цей проект. для текстового редактора можна використовувати що завгодно, тут я використовую код Visual Studio.
Ви його встановили? Гаразд, давайте зробимо це!
якщо ви створили проект, створіть файл main.go . Добре, давайте код, спочатку ми почнемо з main.go. Почнемо з частини struct Block «блокчейну». У блокчейні це блоки, які зберігають цінну інформацію. Наприклад, блоки біткойн зберігають транзакції, суть будь-якої криптовалюти. Крім цього, блок містить деяку технічну інформацію, як-от його версія, поточна позначка часу та хеш попереднього блоку. У цій статті ми не збираємося впроваджувати блок, як це описано в специфікаціях блокчейну або біткойна, натомість ми використовуватимемо його спрощену версію, яка містить лише важливу інформацію. Ось як це виглядає. тут у нас є структурний блок:
type Block struct {timestamp time.Timeтранзакції []рядокprevhash []байтХеш []байт}
Timestamp
це поточна позначка часу (коли блок створюється), transactions
це фактично цінна інформація, що міститься в блоці, prevhas
зберігає хеш попереднього блоку, і Hash
це хеш блоку. У специфікації Bitcoin Timestamp
, prevhash
та Hash
це заголовки блоків, які утворюють окрему структуру даних, і транзакції (transaction
у нашому випадку) є окремою структурою даних. Тому ми змішуємо їх тут для простоти.
Отже, як ми обчислюємо хеші? Спосіб обчислення хешів є дуже важливою особливістю блокчейну, і саме ця функція робить блокчейн безпечним. Річ у тім, що розрахунок хешу є обчислювально складною операцією, вона займає деякий час навіть на швидких комп’ютерах (ось чому люди купують потужні графічні процесори для майнінгу біткойнів). Це навмисна архітектурна конструкція, яка ускладнює додавання нових блоків, таким чином запобігаючи їх модифікації після додавання. Ми обговоримо та запровадимо цей механізм у наступній статті.
Наразі ми просто візьмемо поля блоків, об’єднаємо їх і обчислимо хеш SHA-256 для об’єднаної комбінації. Давайте зробимо це в Newhash
метод:
func NewHash(time time.Time, transactions []string, prevhash []byte) []byte {input := append(prevhash, time.String()...)для транзакції := діапазон транзакцій {input = append(input, string(rune(transaction))...)}хеш := sha256.Sum256(вхід)повернути хеш[:]}
Далі, дотримуючись конвенції Golang, ми реалізуємо функцію, яка спростить створення блоку та завершить:
func Blocks(transactions []string, prevhash []byte) *Block {currentTime := time.Now()повернути &Блокувати{timestamp: time.Time{},транзакції: транзакції,prevhash: попередній,Хеш: NewHash(currentTime, transactions, prevhash),}}
продовжуємо створювати функцію друку. функція друку корисна для друку вмісту кожного блоку, який виконує транзакцію. ось код:
func Print(block *Block) {fmt.Printf("ttime: %sn", block.timestamp.String())fmt.Printf("tprevhash: %xn", block.prevhash)fmt.Printf("хеш: %xn", block.Hash)}
І функція транзакції для транзакції друку:
func Transaction(block *Block) {fmt.Println("tTransactions:")для i транзакція := діапазон block.transactions {fmt.Printf("tt%v: %qn", i, транзакція)}}
після виконання всіх необхідних функцій ми будемо використовувати його в основній функції:
func main() {ryan := []string{"ryandi надіслав 50 BTC Reza"}block_1 := Блоки (ryan, []byte{})fmt.Println("Це наш перший блок")Друк (блок_1)Трансакція (блок_1)jack := []string{"jack send 20 BTC Reynold"}block_2 := Blocks(jack, block_1.Hash)fmt.Println("Це наш другий блок")Друк (блок_2)Трансакція (блок_2)}
добре, весь код, який ми закінчили писати. Давайте запустимо його, ввівши go run main.go у терміналі. Вихід:
Висновок
Ми створили дуже простий прототип блокчейну: це просто масив блоків, кожен з яких має зв’язок із попереднім. Фактичний блокчейн набагато складніший. У нашому блокчейні додавати нові блоки легко та швидко, але в реальному блокчейні додавання нових блоків вимагає певної роботи: потрібно виконати деякі важкі обчислення, перш ніж отримати дозвіл на додавання блоків (цей механізм називається Proof-of-Work). Крім того, блокчейн — це розподілена база даних, у якій немає єдиної особи, яка приймає рішення. Таким чином, новий блок повинен бути підтверджений і схвалений іншими учасниками мережі (цей механізм називається консенсусом). А в нашому блокчейні ще немає транзакцій!
- "
- ВСІ
- стаття
- статті
- Біткойн
- blockchain
- БТД
- будувати
- купити
- код
- комп'ютери
- зв'язку
- Консенсус
- зміст
- продовжувати
- криптовалюта
- Поточний
- дані
- Database
- дизайн
- редактор
- ШВИДКО
- особливість
- Поля
- Перший
- стежити
- форма
- функція
- майбутнє
- GV
- мішанина
- тут
- Як
- hr
- HTTPS
- ia
- інформація
- IP
- IT
- середа
- мережу
- Інше
- Люди
- попередження
- проект
- Proof-of-Work
- діапазон
- прогін
- Серія
- простий
- So
- старт
- зберігати
- магазинів
- технічний
- час
- угода
- Transactions
- W
- Work
- лист