Xây dựng ứng dụng của Blockchain

Xây dựng ứng dụng của Blockchain

Rate this post

Ứng dụng phi tập trung

Sự phổ biến của công nghệ blockchain chủ yếu được thúc đẩy bởi thực tế là nó có thể giải quyết các vấn đề khác nhau trong thế giới thực vì nó cung cấp minh bạch và bảo mật hơn (chống giả mạo) so với thông thường công nghệ. Có rất nhiều trường hợp sử dụng blockchain được xác định bởi một số các công ty khởi nghiệp và các thành viên cộng đồng nhằm giải quyết những vấn đề này Để triển khai các trường hợp sử dụng này, chúng tôi tạo các ứng dụng hoạt động trên của các blockchains. Nói chung, các ứng dụng tương tác với blockchain được gọi là “ứng dụng phi tập trung” hoặc nói ngắn gọn là chỉ DApps hoặc dApps. 

Các bài viết liên quan:

Để hiểu rõ hơn về DApp, trước tiên chúng ta hãy xem lại blockchain là gì.

Blockchain hoặc sổ cái phân tán về cơ bản là một loại cơ sở dữ liệu đặc biệt nơi dữ liệu không được lưu trữ tại một máy chủ tập trung, nhưng nó được sao chép tất cả các nút tham gia trong mạng. Ngoài ra, dữ liệu trên blockchains là được ký bằng mật mã, chứng minh danh tính của thực thể đã viết dữ liệu đó trên blockchain. 

Xây dựng ứng dụng của Blockchain

Để sử dụng cơ sở dữ liệu này để lưu trữ và truy xuất dữ liệu, chúng tôi tạo các ứng dụng được gọi là DApps vì những các ứng dụng không dựa trên cơ sở dữ liệu tập trung mà dựa trên blockchain- dựa trên kho dữ liệu phi tập trung. Không có điểm thất bại hoặc kiểm soát duy nhất cho các ứng dụng này. Hãy lấy một ví dụ về DApp. Hãy xem một kịch bản về chuỗi cung ứng nơi một số nhà cung cấp và đối tác hậu cần tham gia vào việc cung cấp quy trình dây chuyền sản xuất hàng hóa. Để sử dụng công nghệ blockchain cho trường hợp sử dụng chuỗi cung ứng này, đây là những gì chúng tôi sẽ làm:

Chúng ta sẽ cần thiết lập các nút blockchain tại mỗi của những nhà cung cấp này để họ có thể tham gia vào quy trình đồng thuận về dữ liệu được chia sẻ.

Chúng tacần một giao diện để tất cả những người tham gia và người dùng có thể lưu trữ, truy xuất, xác minh và đánh giá dữ liệu trên blockchain. Giao diện này sẽ được sử dụng bởi nhà sản xuất để nhập thông tin về hàng hóa được sản xuất; bởi đối tác hậu cần để nhập thông tin về việc chuyển hàng hóa; bằng nhà cung cấp kho bãi để xác minh xem hàng hóa được sản xuất và hàng hóa được chuyển đồng bộ, v.v., v.v. Điều này giao diện sẽ là DApp chuỗi cung ứng của chúng ta.

Một ví dụ khác về DApp sẽ là một hệ thống bỏ phiếu dựa trên các blockchains. Sử dụng blockchain để bỏ phiếu, chúng tôi sẽ có thể toàn bộ quá trình minh bạch và an toàn hơn nhiều vì mỗi phiếu bầu sẽ được ký bằng mật mã. Chúng tôi sẽ cần tạo một ứng dụng có thể nhận được danh sách các ứng cử viên mà cử tri có thể bỏ phiếu,và ứng dụng này cũng sẽ cung cấp một giao diện đơn giản để gửi và ghi lại các phiếu bầu. 

Phát triển ứng dụng Blockchain

Trước khi chuyển sang viết mã, trước tiên chúng ta hãy hiểu một số khái niệm cơ bản xung quanh việc phát triển ứng dụng blockchain. Nói chung, chúng tôi được sử dụng đến các khái niệm như đối tượng, lớp, hàm, v.v. khi chúng tôi phát triển ứng dụng phần mềm thông thường. Tuy nhiên, khi nói đến blockchain ứng dụng, chúng ta cần hiểu thêm một vài khái niệm như giao dịch, tài khoản và địa chỉ, mã thông báo và ví, đầu vào và đầu ra và số dư . Cơ chế bắt tay và yêu cầu / phản hồi giữa một ứng dụng phi tập trung và một chuỗi khối được thúc đẩy bởi những khái niệm này.

Đầu tiên, khi phát triển một ứng dụng dựa trên blockchain, chúng tôi cần xác định cách dữ liệu ứng dụng sẽ ánh xạ tới blockchain mô hình dữ liệu. Ví dụ: khi phát triển DApp trên Ethereum blockchain, chúng ta cần hiểu trạng thái ứng dụng có thể như thế nào được trình bày về cấu trúc dữ liệu Solidity và cách ứng dụng hành vi có thể được thể hiện trong các điều khoản của hợp đồng thông minh Ethereum. 

Như chúng ta biết rằng tất cả dữ liệu trên blockchain đều được ký bằng mật mã bởi riêng tư khóa của người dùng, chúng tôi cần xác định thực thể nào trong ứng dụng của chúng tôi sẽ có danh tính hoặc địa chỉ được đại diện trên blockchain. Trong các ứng dụng thông thường, điều này thường không đúng như vậy, bởi vì dữ liệu không phải lúc nào cũng được ký. Đối với ứng dụng blockchain, chúng ta cần xác định ai sẽ là người ký và họ sẽ ký vào dữ liệu nào. Ví dụ, trong DApp bỏ phiếu trong đó mọi cử tri ký tên vào phiếu bầu của họ bằng mật mã, điều này rất dễ xác định. 

Tuy nhiên, hãy tưởng tượng một kịch bản mà chúng ta cần di chuyển một ứng dụng hệ thống phân tán thông thường hiện có, có dữ liệu của nó được lưu trữ trên nhiều bảng và cơ sở dữ liệu SQL, dựa trên DApp trên chuỗi khối Ethereum. 

Xem thêm Mã hóa mật mã: các khái niệm cơ bản

Trong trường hợp này, chúng tôi cần xác định những thực thể nào trong bảng nào sẽ có danh tính của họ và thực thể nào sẽ là gắn liền với các danh tính khác. Trong vài phần tiếp theo, chúng ta sẽ khám phá Bitcoin và Ethereum lập trình ứng dụng bằng cách sử dụng các đoạn mã đơn giản để gửi một số các giao dịch. Mục đích của bài tập này là làm quen với API blockchain và các phương pháp lập trình phổ biến. 

Vì đơn giản, chúng tôi sẽ sử dụng các mạng thử nghiệm công khai cho các blockchains này và chúng tôi sẽ viết mã bằng JavaScript. Lý do chọn JavaScript là, tại thời điểm này viết, chúng tôi có các thư viện JavaScript ổn định có sẵn cho cả hai blockchains và sẽ dễ dàng hơn khi hiểu những điểm giống và khác nhau trong phương pháp tiếp cận chúng tôi thực hiện trong khi viết mã. Các đoạn mã được giải thích chi tiết sau mỗi bước hợp lý và có thể hiểu được ngay cả khi người đọc không quen với lập trình JavaScript.

Tương tác với chuỗi khối Bitcoin

Trong phần này, chúng tôi sẽ gửi một giao dịch đến mạng thử nghiệm công khai Bitcoin từ địa chỉ này đến địa chỉ khác. Hãy coi đây là một ứng dụng “ Hello World ” cho chuỗi khối Bitcoin. 

Như đã đề cập trước đây, chúng tôi sẽ sử dụng thư viện JavaScript bitcoinjs để chuẩn bị và ký kết các giao dịch. Và để đơn giản, thay vì lưu trữ một nút Bitcoin cục bộ, chúng tôi sẽ sử dụng Nút mạng thử nghiệm Bitcoin được lưu trữ bởi trình khám phá khối của nhà cung cấp bên thứ ba .

Lưu ý rằng bạn có thể sử dụng bất kỳ nhà cung cấp nào cho ứng dụng của mình và bạn cũng có thể lưu trữ một nút cục bộ. Tất cả những gì bạn cần làm là trỏ mã ứng dụng của mình tới kết nối với nút ưa thích của bạn. Nhớ lại các chương trước rằng blockchain Bitcoin chủ yếu là để cho phép thanh toán ngang hàng. Một giao dịch Bitcoin chủ yếu chỉ là chuyển Bitcoin từ địa chỉ này sang địa chỉ khác. Đây là cách chúng tôi làm điều này theo chương trình. Sau đây (Hình  5-2 ) cho thấy cách mã này tương tác với Chuỗi khối bitcoin. 

Lưu ý: Hình vẽ chỉ là bản phác thảo thô và không hiển thị chi tiết kiến ​​trúc dịch vụ Block Explorer.

Xây dựng ứng dụng của Blockchain

Hình 5-2. Ứng dụng tương tác với chuỗi khối Bitcoin bằng cách sử dụng API Block Explorer

Xem thêm Cấu trúc Blockchain của bitcoin(Mở trong cửa số mới)

Thiết lập và khởi tạo thư viên bitcoinjs trong một ứng dụng nodejs

Trước khi chúng tôi gọi mã dành riêng cho thư viện cho các giao dịch Bitcoin, chúng tôi sẽ cài đặt và khởi tạo thư viện bitcoinjs . Sau khi khởi tạo ứng dụng node.js bằng lệnh npm init, hãy tạo một điểm vào cho ứng dụng, index.js và tùy chỉnh của chúng tôi Mô-đun hoạt Javascript để gọi bitcoinjs chức năng thư viện btc.js . Nhập btc.js trong index.js . Bây giờ, chúng tôi đã sẵn sàng để làm theo các bước tiếp theo. Đầu tiên, hãy cài đặt mô-đun node cho bitcoinjs :

npm install --save bitcoinjs-lib

Sau đó, trong mô-đun Bitcoin btc.js của chúng tôi, chúng tôi sẽ khởi tạo bitcoinjs thư viện sử dụng từ khóa request:

var btc = require('bitcoinjs-lib');

Bây giờ chúng ta có thể sử dụng biến btc này để gọi các hàm thư viện trên thư viện bitcoinjs. Ngoài ra, là một phần của quá trình khởi tạo, chúng tôi khởi tạo một vài biến khác:

The network to target: Chúng tôi đang sử dụng thử nghiệm Bitcoin mạng.

var network = btc.networks.testnet;

Điểm cuối API nút công khai để lấy và đăng giao dịch: Chúng tôi đang sử dụng API Block Explorer cho Mạng thử nghiệm bitcoin. Lưu ý rằng bạn có thể thay thế API này điểm cuối với điểm cuối ưa thích của bạn.

var blockExplorerTestnetApiEndpoint = 'https://testnet.blockexplorer.com/api/';

Tại thời điểm này, tất cả chúng ta đều được thiết lập để tạo một giao dịch Bitcoin bằng cách sử dụng ứng dụng node.js.

Tạo keypairs cho người nhận và người gửi

Điều đầu tiên mà chúng ta cần là cặp chìa khóa cho người gửi và máy thu. Chúng giống như tài khoản người dùng xác định người dùng trên chuỗi khối. Vì vậy, trước tiên chúng ta hãy tạo hai keypairs cho Alice và Bob.

var getKeys = function () {
var	aliceKeys = btc.ECPair.makeRandom({ network: network});
var	bobKeys = btc.ECPair.makeRandom({ network: network});
var alicePublic = aliceKeys.getAddress(); var alicePrivate = aliceKeys.toWIF(); var bobPublic = bobKeys.getAddress(); var bobPrivate = bobKeys.toWIF(); console.log(alicePublic, alicePrivate, bobPublic, bobPrivate);
};

Những gì chúng tôi đã làm trong đoạn mã trước là, chúng tôi đã sử dụng lớp ECPair của thư viện bitcoinjs và được gọi là phương thức makeRandom trên đó để tạo cặp khóa ngẫu nhiên cho mạng thử nghiệm; lưu ý tham số được truyền cho dạng kết nối.

Bây giờ chúng tôi đã tạo một vài cặp khóa, hãy sử dụng chúng để gửi Bitcoin từ cái này sang cái khác. Trong hầu hết các ví dụ về mật mã, Alice và Bob là những nhân vật được yêu thích, như đã thấy ở phần trước biến keypair. 

Tuy nhiên, mỗi khi chúng ta thấy một ví dụ về mật mã, nói chung Alice là người mã hóa / ký tên gì đó và gửi cho Bob Vì lý do đó, chúng tôi cảm thấy Bob đang phải gánh rất nhiều nợ từ Alice, vì vậy trong trường hợp của chúng tôi chúng tôi sẽ giúp Bob trả một số khoản nợ đó. Chúng tôi sẽ làm ví dụ này Bitcoin giao dịch từ Bob đến Alice.

Nhận bitcoin thử nghiệm trong ví người gửi

Chúng tôi đã xác định rằng Bob sẽ đóng vai trò là người gửi trong ví dụ giao dịch Bitcoin. Trước khi gửi bất kỳ Bitcoin nào cho Alice, anh ấy cần sở hữu chúng. Như chúng ta biết rằng giao dịch mẫu này đang nhắm mục tiêu mạng thử nghiệm Bitcoin, không có tiền thật tham gia nhưng chúng tôi vẫn cần một số Bitcoin thử nghiệm trong ví của Bob. 

Một cách đơn giản để nhận Bitcoin mạng thử nghiệm là hỏi trên Internet. Có rất nhiều trang web trên Internet lưu trữ một biểu mẫu web đơn giản để lấy địa chỉ testnet Bitcoin và sau đó gửi Bitcoin ròng thử nghiệm cho những người đó. Các dịch vụ này được gọi là Bitcoin testnet và nếu bạn tìm kiếm trực tuyến cụm từ đó, bạn sẽ nhận được rất nhiều trong số đó kết quả tìm kiếm. 

Chúng tôi không liệt kê hoặc đề xuất bất kỳ testnet cụ thể nào vòi vì chúng thường không vĩnh viễn. Ngay khi có vòi nhà cung cấp dịch vụ đã sử dụng hết số tiền thử nghiệm của họ hoặc họ không muốn lưu trữ dịch vụ nữa, họ đóng cửa. Nhưng sau đó những cái mới tiếp tục xuất hiện mọi lúc. Danh sách một số dịch vụ vòi này cũng có sẵn trên Trang testnet wiki bitcoin.

Một cách khác để nhận Bitcoin ròng thử nghiệm là lưu trữ một nút Bitcoin cục bộ chỉ vào mạng thử nghiệm và khai thác một số. Khai thác khối trên Bitcoin mạng kiểm tra không khó như trên mạng chính. Cách tiếp cận này cũng có thể là cách tiếp cận cấp độ tiếp theo khi bạn đang xây dựng một sản phẩm Ứng dụng Bitcoin và bạn cần phải kiểm tra nó thường xuyên. Thay vì yêu cầu thử nghiệm đồng tiền mỗi khi bạn muốn kiểm tra ứng dụng của mình, bạn có thể khai thác chính họ.

Đối với mục đích của ví dụ đơn giản này, chúng tôi sẽ chỉ nhận được một số Bitcoin từ testnet. Trong đoạn mã trước đó, giá trị trong biến bobPublic là địa chỉ testnet Bitcoin của Bob. Khi chúng tôi chạy cái này đoạn mã, nó đã tạo

“msDkUzzd69idLLGCkDFDjVRz44jHcV3pW2” là của Bob Địa chỉ. 

Nó cũng là khóa công khai được mã hóa cơ sở 58 của Bob. Chúng tôi sẽ gửi cái này giá trị trong một trong các biểu mẫu web vòi testnet và đổi lại, chúng tôi sẽ nhận được ID giao dịch. Nếu chúng tôi tra cứu ID giao dịch đó trên bất kỳ Bitcoin nào người khám phá testnet, chúng tôi sẽ thấy rằng một số địa chỉ khác đã gửi một số thử nghiệm Bitcoin đến địa chỉ của Bob mà chúng tôi đã gửi trong biểu mẫu.

Nhận đầu ra chưa chi tiêu của người gửi

Bây giờ chúng tôi biết rằng chúng tôi có một số Bitcoin thử nghiệm trong ví của Bob, chúng tôi có thể chi tiêu chúng và đưa chúng cho Alice thông qua giao dịch Bitcoin. Hãy nhớ lại từ các bài viết trước cách các giao dịch Bitcoin được tạo ra từ các đầu vào và kết quả đầu ra.

 Bạn có thể sử dụng các đầu ra chưa sử dụng của mình bằng cách thêm chúng làm đầu vào cho các giao dịch mà bạn muốn chi tiêu chúng. Để làm được điều đó, trước tiên bạn cần truy vấn mạng về kết quả đầu ra chưa được gửi của người gửi. Đây là cách chúng tôi sẽ làm điều đó cho địa chỉ testnet Bitcoin của Bob bằng cách sử dụng trình khám phá khối API. Để nhận các đầu ra chưa sử dụng, chúng tôi sẽ gửi một yêu cầu HTTP đến UTXO điểm cuối có địa chỉ của Bob “msDkUzzd69idLLGCkDFDjVRz44jHcV3pW2”.

var getOutputs = function () {
var url = blockExplorerTestnetApiEndpoint + 'addr/' + msDkUzzd69idLLGCkDFDjVRz44jHcV3pW2 + '/utxo'; return new Promise(function (resolve, reject) {
request.get(url, function (err, res, body) { if (err) {
reject(err);
}
resolve(body);
});
});
 };

Trong đoạn mã trước, chúng tôi đã sử dụng yêu cầu node.js để gửi các yêu cầu http bằng ứng dụng node.js. Hãy thoải mái sử dụng thư viện / mô-đun http yêu thích của bạn. Đoạn mã này là một hàm JavaScript trả về một lời hứa sẽ phân giải thành cơ quan phản hồi từ API phương pháp. Đây là cách phản hồi trông như thế nào:

[
{
address: 'msDkUzzd69idLLGCkDFDjVRz44jHcV3pW2',
txid: 'db2e5966c5139c6e937203d567403867643482bbd9a6624
752bbc583ca259958',
vout: 0,
scriptPubKey: '76a914806094191cbd4fcd8b4169a70588ad
c51dc02d6888ac',
amount: 0.99992,
satoshis: 99992000,
height: 1258815,
confirmations: 1011
},
{

address: 'msDkUzzd69idLLGCkDFDjVRz44jHcV3pW2', txid: '5b88d5fc4675bb86b0a3a7fc5a36df9c425c3880a7 453e3afeb4934e6d1d928e',
vout: 1,
scriptPubKey: '76a914806094191cbd4fcd8b4169a70588ad
c51dc02d6888ac',
amount: 0.99998,
satoshis: 99998000,
height: 1258814,
confirmations: 1012
}

]

Nội dung phản hồi được trả về bởi cuộc gọi là một mảng JSON có hai các đối tượng. Mỗi đối tượng này đại diện cho một đầu ra chưa được sử dụng cho Bob. Mỗi đầu ra có txid, là ID giao dịch nơi đầu ra này được liệt kê, số lượng liên quan đến đầu ra và vout, có nghĩa là trình tự hoặc số chỉ mục của đầu ra trong giao dịch đó. Có một số khác thông tin trong các đối tượng JSON cũng vậy, nhưng thông tin đó sẽ không được sử dụng trong quy trình chuẩn bị giao dịch. 

Nếu chúng ta lấy đối tượng đầu tiên trong mảng, về cơ bản nó nói rằng Địa chỉ bitcoin testnet “msDkUzzd69idLLGCkDFDjVRz44jHcV3pW2” có `99992000` satoshi chưa sử dụng đến từ giao dịch

`db2e5966c5139c6e937203d567403867643482bbd9a6624752bbc583ca259958` tại chỉ mục `0`. 

Tương tự, đối tượng thứ hai đại diện cho `99998000` satoshi chưa sử dụng đến từ giao dịch

`5b88d5fc4675bb86b0a3a7fc5a36df9c425c3880a7453e3afeb4934e6d1d928e` tại chỉ mục `1`. Đừng quên rằng “msDkUzzd69idLLGCkDFDjVRz44jHcV3pW2” là của Bob Bitcoin testnet, chúng tôi đã tạo ở bước 2 trước đó. Bây giờ chúng tôi biết rằng Bob có nhiều satoshi này, mà anh ta có thể chi tiêu trong một giao dịch mới.

Chuẩn bị giao dịch Bitcoin

Bước tiếp theo là chuẩn bị một giao dịch Bitcoin trong đó Bob có thể gửi thử nghiệm tiền xu cho Alice. Chuẩn bị giao dịch về cơ bản là xác định đầu vào của nó,đầu ra và số lượng.

Như chúng ta đã biết từ bước trước rằng Bob có hai đầu ra chưa được sử dụng dưới địa chỉ testnet Bitcoin của anh ấy, chúng ta hãy dành phần tử đầu tiên của đầu ra mảng. Hãy thêm điều này làm đầu vào cho giao dịch của chúng ta

var utxo = JSON.parse(body.toString());
var transaction = new btc.TransactionBuilder(network); transaction.addInput(utxo[0].txid, utxo[0].vout);

Trong đoạn mã preceding, trước tiên, chúng tôi đã phân tích cú pháp phản hồi mà chúng tôi đã nhận được từ lệnh gọi API trước đó để nhận các kết quả đầu ra chưa được sử dụng của Bob.

Sau đó, chúng tôi đã tạo một đối tượng xây dựng giao dịch cho thử nghiệm Bitcoin mạng sử dụng thư viện bitcoinjs.

Trong dòng cuối cùng, chúng tôi đã xác định đầu vào giao dịch. Lưu ý rằng đầu vào này đang đề cập đến phần tử ở chỉ số 0 của mảng utxo, mà chúng tôi đã nhận được trong lệnh gọi API từ bước trước. Chúng tôi đã thông qua ID giao dịch (txid) và chuyển từ phương thức chưa được gửi đến phương thức transaction.addInput như các tham số đầu vào.

Về cơ bản, chúng tôi đang xác định những gì chúng tôi muốn chi tiêu và chúng tôi lấy nó ở đâu từ.

Tiếp theo, chúng tôi thêm các đầu ra giao dịch. Đây là nơi chúng tôi nói cách chúng tôi muốn chi tiêu những gì chúng tôi đã thêm vào đầu vào. Trong dòng sau, chúng tôi đã thêm đầu ra giao dịch bằng cách gọi phương thức addOutput trên đối tượng trình tạo giao dịch và được chuyển vào địa chỉ đích và số lượng. Bob muốn gửi 99990000 satoshi cho Alice. Lưu ý rằng chúng tôi có đã sử dụng địa chỉ testnet Bitcoin của Alice làm tham số đầu tiên của hàm

transaction.addOutput (alicePublic, 99990000);

Trong khi chúng tôi chỉ sử dụng một đầu vào và một đầu ra trong ví dụ này giao dịch, một giao dịch có thể có nhiều đầu vào và đầu ra. Một điều quan trọng cần lưu ý là tổng lượng đầu vào không được nhỏ hơn tổng số tiền trong kết quả đầu ra. Hầu hết thời gian, số tiền trong đầu vào nhiều hơn một chút so với lượng đầu ra và sự khác biệt là phí giao dịch được cung cấp cho các thợ đào để bao gồm giao dịch này khi họ khai thác khối tiếp theo.

Trong giao dịch này, chúng tôi có 2.000 satoshi làm phí giao dịch, là sự khác biệt giữa số tiền đầu vào (99992000) và đầu ra số tiền (99990000). Lưu ý rằng chúng tôi không phải tạo bất kỳ đầu ra nào cho Phí giao dịch; sự khác biệt giữa tổng số tiền đầu vào và đầu ra được tự động lấy làm phí giao dịchNgoài ra, lưu ý rằng chúng ta không thể sử dụng một phần kết quả đầu ra chưa sử dụng. Nếu một người chưa gửi đầu ra có x lượng Bitcoin được liên kết với nó thì chúng ta phải chi tiêu tất cả x Bitcoin khi thêm đầu ra chưa sử dụng này làm đầu vào trong Giao dịch. 

Vì vậy, trong trường hợp Bob không muốn cung cấp tất cả 99,990,000 satoshi được liên kết với kết quả đầu ra chưa được sử dụng của anh ấy cho Alice, sau đó chúng tôi cần đưa nó trở lại Bob bằng cách thêm một đầu ra khác vào giao dịch với số tiền bằng sự khác biệt của tổng số tiền chưa tiêu và số tiền Bob muốn cung cấp cho Alice.

Ký kết đầu vào giao dịch

Bây giờ, chúng tôi đã xác định các đầu vào và đầu ra trong giao dịch, chúng tôi cần phải ký các đầu vào bằng các phím của Bob. Dòng mã lệnh gọi sau hàm ký trên đối tượng trình tạo giao dịch để mã hóa ký giao dịch bằng khóa riêng của Bob, nhưng phải mất toàn bộ cặp khóa đối tượng như một tham số đầu vào .transaction.sign (0, bobKeys); 

Lưu ý rằng hàm transaction.sign lấy chỉ mục của đầu vào và cặp khóa đầy đủ làm tham số đầu vào. Trong giao dịch này, bởi vì chúng tôi chỉ có một đầu vào, chỉ số chúng ta đã vượt qua là 0. Ở giai đoạn này, giao dịch của chúng tôi đã được chuẩn bị và ký kết.

Tạo HEX để giao dịch

Bây giờ chúng ta sẽ tạo một chuỗi hex từ đối tượng giao dịch. var transactionHex = transaction.build (). toHex ();

Đầu ra của dòng mã này là chuỗi sau, đại diện cho giao dịch đã chuẩn bị của chúng tôi; bước này là cần thiết vì giao dịch gửi API chấp nhận giao dịch thô dưới dạng một chuỗi

Truyền giao dịch lên mạng

Cuối cùng, chúng tôi sử dụng giá trị chuỗi hex mà chúng tôi đã tạo ở bước cuối cùng và gửi nó đến nút testnet công khai của trình khám phá khối bằng cách sử dụng API,

var txPushUrl = blockExplorerTestnetApiEndpoint + 'tx/send'; request.post({url: txPushUrl,json: {
rawtx: transactionHex
}
}, function (err, res, body) {
if (err) console.log(err);
console.log(res);
console.log(body);
});

Nếu giao dịch được chấp nhận bởi nút công khai của trình khám phá khối, chúng tôi sẽ nhận ID giao dịch dưới dạng phản hồi của lệnh gọi API này

{
txid: "db2e5966c5139c6e937203d567403867643482bbd 9a6624752bbc583ca259958"
}

Bây giờ chúng ta đã có ID giao dịch của giao dịch của mình, chúng ta có thể xem nó lên bất kỳ trình khám phá testnet trực tuyến nào để xem liệu nó có được khai thác hay không và nó có bao nhiêu xác nhận.

Tổng hợp tất cả lại với nhau, đây là mã hoàn chỉnh để gửi Bitcoin giao dịch testnet sử dụng JavaScript. Các tham số đầu vào là Bitcoin các cặp khóa testnet mà chúng tôi đã tạo ở bước 1

var	createTransaction = function (aliceKeys, bobKeys) { getOutputs(bobKeys.getAddress()).then(function (res) {
var utxo = JSON.parse(res.toString());
var transaction = new btc.TransactionBuilder(network);
transaction.addInput(utxo[0].txid, utxo[0].vout);
transaction.addOutput(alicekeys.getAddress(),
99990000);
transaction.sign(0, bobKeys);
var transactionHex = transaction.build().toHex();
var txPushUrl = blockExplorerTestnetApiEndpoint +
'tx/send';
request.post({
url: txPushUrl,
json: {
rawtx: transactionHex
}
}, function (err, res, body) {
if (err) console.log(err);
console.log(res);
console.log(body);
});
});
};

Trong phần này, chúng tôi đã tìm hiểu cách chúng tôi có thể gửi giao dịch với mạng thử nghiệm Bitcoin. Tương tự, chúng tôi có thể gửi các giao dịch vào mạng chính Bitcoin bằng cách sử dụng mạng chính làm mục tiêu trong các hàm thư viện và trong các điểm cuối API. Chúng tôi cũng đã sử dụng các API truy vấn để nhận được kết quả đầu ra chưa sử dụng của một địa chỉ Bitcoin. Các chức năng này có thể được sử dụng

để tạo một ứng dụng ví Bitcoin đơn giản để truy vấn và quản lý Bitcoin địa chỉ và giao dịch

Leave a Reply