Trình tự khởi động Blockchain AElf
Phần này chủ yếu giải thích cách AElf Blockchain bắt đầu từ các nút ban đầu và dần dần thay thế các nút ban đầu bằng các nút sản xuất thực sự thông qua các cuộc bầu cử, do đó hoàn thành quá trình hoàn chỉnh của khởi động AElf Blockchain.
Bắt đầu các nút ban đầu
Chúng tôi cần bắt đầu ít nhất một hoặc nhiều nút ban đầu để bắt đầu AElf Blockchain và 1-5 nút ban đầu được khuyến nghị.
Trong phần Bắt đầu, chúng tôi đã mô tả các bước để khởi động nhiều nút, bạn có thể làm theo Chạy nhiều nút với Docker để hoàn thành việc khởi động các nút ban đầu (phần này cũng lấy ví dụ về việc khởi động ba nút ban đầu).
Vì khoảng thời gian bầu cử mặc định là 604800 giây (7 ngày), nếu bạn muốn xem kết quả bầu cử nhanh hơn, hãy sửa đổi tệp cấu hình appsettings.json trước khi bắt đầu các nút khởi động để đặt Khoảng thời gian thành nhỏ hơn:
{
"Consensus": {
"PeriodSeconds": 604800
},
}
Chạy toàn bộ nút
Tạo tài khoản cho nút đầy đủ:
aelf-command create
AElf [Info]: Your wallet info is :
AElf [Info]: Mnemonic : major clap hurdle hammer push slogan ranch quantum reunion hope enroll repeat
AElf [Info]: Private Key : 2229945cf294431183fd1d8101e27b17a1a590d3a1f7f2b9299850b24262ed8a
AElf [Info]: Public Key : 04eed00eb009ccd283798e3862781cebd25ed6a4641e0e1b7d0e3b6b59025040679fc4dc0edc9de166bd630c7255188a9aeadfc832fdae0828270f77c6ef267905
AElf [Info]: Address : Q3t34SAEsxAQrSQidTRzDonWNTPpSTgH8bqu8pQUGCSWRPdRC
Bắt đầu nút đầy đủ:
Các bước khởi động cho nút đầy đủ tương tự như khởi động nút ban đầu, nhưng phần tệp cấu hình lưu ý rằng InitialMinerList cần phải nhất quán với nút ban đầu:
{
"InitialMinerList" : [
"0499d3bb14337961c4d338b9729f46b20de8a49ed38e260a5c19a18da569462b44b820e206df8e848185dac6c139f05392c268effe915c147cde422e69514cc927",
"048397dfd9e1035fdd7260329d9492d88824f42917c156aef93fd7c2e3ab73b636f482b8ceb5cb435c556bfa067445a86e6f5c3b44ae6853c7f3dd7052609ed40b",
"041cc962a51e7bbdd829a8855eca8a03fda708fdf31969251321cb31edadd564bf3c6e7ab31b4c1f49f0f206be81dbe68a75c70b293bf9d04d867ee5e415d3bf8a"
],
}
Toàn bộ nút đã bắt đầu thành công:
Bằng cách kiểm tra trạng thái nút hiện tại, có thể thấy rằng nút đầy đủ đang đồng bộ hóa, BestChainHeight và LastIrreversibleBlockHeight đang lớn lên. Sau khi bắt kịp chiều cao của nút ban đầu, các bước tiếp theo có thể được thực hiện.
aelf-command get-chain-status
{
"ChainId": "AELF",
"Branches": {
"fb749177c2f43db8c7d73ea050240b9f870c40584f044b13e7ec146c460b0eff": 2449
},
"NotLinkedBlocks": {},
"LongestChainHeight": 2449,
"LongestChainHash": "fb749177c2f43db8c7d73ea050240b9f870c40584f044b13e7ec146c460b0eff",
"GenesisBlockHash": "ea9c0b026bd638ceb38323eb71174814c95333e39c62936a38c4e01a8f18062e",
"GenesisContractAddress": "pykr77ft9UUKJZLVq15wCH8PinBSjVRQ12sD1Ayq92mKFsJ1i",
"LastIrreversibleBlockHash": "66638f538038bd56357f3cf205424e7393c5966830ef0d16a75d4a117847e0bc",
"LastIrreversibleBlockHeight": 2446,
"BestChainHash": "fb749177c2f43db8c7d73ea050240b9f870c40584f044b13e7ec146c460b0eff",
"BestChainHeight": 2449
}
Là một nút ứng cử viên
Các nút đầy đủ cần gọi Hợp đồng bầu cử để trở thành các nút ứng cử viên. Các nút cần thế chấp 10W ELF để tham gia bầu cử, vui lòng đảm bảo rằng tài khoản của các nút có đủ mã thông báo.
Để tạo thuận lợi cho việc trình diễn nhanh chóng, chúng tôi chuyển trực tiếp mã thông báo từ tài khoản nút ban đầu đầu tiên sang tài khoản nút đầy đủ:
aelf-command send AElf.ContractNames.Token Transfer '{"symbol": "ELF", "to": "Q3t34SAEsxAQrSQidTRzDonWNTPpSTgH8bqu8pQUGCSWRPdRC", "amount": "20000000000000"}'
Bằng cách kiểm tra số dư của tài khoản nút đầy đủ, chúng ta có thể thấy rằng tài khoản nút đầy đủ có đủ mã thông báo, 20W ELF:
aelf-command call AElf.ContractNames.Token GetBalance '{"symbol": "ELF", "owner": "Q3t34SAEsxAQrSQidTRzDonWNTPpSTgH8bqu8pQUGCSWRPdRC"}'
Result:
{
"symbol": "ELF",
"owner": "Q3t34SAEsxAQrSQidTRzDonWNTPpSTgH8bqu8pQUGCSWRPdRC",
"balance": "20000000000000"
}
Full node thông báo cuộc bầu cử với quản trị viên được chỉ định trong params:
aelf-command send AElf.ContractNames.Election AnnounceElection '{"value": "Q3t34SAEsxAQrSQidTRzDonWNTPpSTgH8bqu8pQUGCSWRPdRC"}' -a Q3t34SAEsxAQrSQidTRzDonWNTPpSTgH8bqu8pQUGCSWRPdRC
Bằng cách hỏi thông tin ứng viên, chúng tôi có thể thấy toàn bộ nút đã là ứng viên:
aelf-command call AElf.ContractNames.Election GetCandidateInformation '{"value":"04eed00eb009ccd283798e3862781cebd25ed6a4641e0e1b7d0e3b6b59025040679fc4dc0edc9de166bd630c7255188a9aeadfc832fdae0828270f77c6ef267905"}'
Result:
{
"terms": [],
"pubkey": "04eed00eb009ccd283798e3862781cebd25ed6a4641e0e1b7d0e3b6b59025040679fc4dc0edc9de166bd630c7255188a9aeadfc832fdae0828270f77c6ef267905",
"producedBlocks": "0",
"missedTimeSlots": "0",
"continualAppointmentCount": "0",
"announcementTransactionId": "8cc8eb5de35e390e4f7964bbdc7edc433498b041647761361903c6165b9f8659",
"isCurrentCandidate": true
}
Cuộc bầu cử phiếu bầu của người dùng
Đối với kịch bản bỏ phiếu của người dùng được mô phỏng, chúng tôi tạo một tài khoản người dùng:
aelf-command create
AElf [Info]: Your wallet info is :
AElf [Info]: Mnemonic : walnut market museum play grunt chuckle hybrid accuse relief misery share meadow
AElf [Info]: Private Key : 919a220fac2d80e674a256f2367ac840845f344269f4dcdd56d37460de17f947
AElf [Info]: Public Key : 04794948de40ffda2a6c884d7e6a99bb8e42b8b96b9ee5cc4545da3a1d5f7725eec93de62ddbfb598ef6f04fe52aa310acc7d17abeeea3946622573c4b0b2433ac
AElf [Info]: Address : ZBBPU7DMVQ72YBQNmaKTDPKaAkHNzzA3naH5B6kE7cBm8g1ei
Sau khi tài khoản người dùng được tạo thành công, trước tiên chúng tôi sẽ chuyển một số mã thông báo vào tài khoản để bỏ phiếu.
aelf-command send AElf.ContractNames.Token Transfer '{"symbol": "ELF", "to": "ZBBPU7DMVQ72YBQNmaKTDPKaAkHNzzA3naH5B6kE7cBm8g1ei", "amount": "200000000000"}'
Xác nhận đã nhận được mã thông báo:
aelf-command call AElf.ContractNames.Token GetBalance '{"symbol": "ELF", "owner": "ZBBPU7DMVQ72YBQNmaKTDPKaAkHNzzA3naH5B6kE7cBm8g1ei"}'
Result:
{
"symbol": "ELF",
"owner": "ZBBPU7DMVQ72YBQNmaKTDPKaAkHNzzA3naH5B6kE7cBm8g1ei",
"balance": "200000000000"
}
Người dùng bỏ phiếu trên các nút ứng cử viên thông qua hợp đồng bầu cử.
aelf-command send AElf.ContractNames.Election Vote '{"candidatePubkey":"04eed00eb009ccd283798e3862781cebd25ed6a4641e0e1b7d0e3b6b59025040679fc4dc0edc9de166bd630c7255188a9aeadfc832fdae0828270f77c6ef267905","amount":2000000000,"endTimestamp":{"seconds":1600271999,"nanos":999000}}' -a ZBBPU7DMVQ72YBQNmaKTDPKaAkHNzzA3naH5B6kE7cBm8g1ei
Bằng cách hỏi phiếu bầu của các ứng cử viên, chúng ta có thể thấy rằng nút đầy đủ đã thu được thành công 20 phiếu bầu.
aelf-command call AElf.ContractNames.Election GetCandidateVote '{"value":"04eed00eb009ccd283798e3862781cebd25ed6a4641e0e1b7d0e3b6b59025040679fc4dc0edc9de166bd630c7255188a9aeadfc832fdae0828270f77c6ef267905"}'
Result:
{
"obtainedActiveVotingRecordIds": [
"172375e9cee303ce60361aa73d7326920706553e80f4485f97ffefdb904486f1"
],
"obtainedWithdrawnVotingRecordIds": [],
"obtainedActiveVotingRecords": [],
"obtainedWithdrawnVotesRecords": [],
"obtainedActiveVotedVotesAmount": "2000000000",
"allObtainedVotedVotesAmount": "2000000000",
"pubkey": "BO7QDrAJzNKDeY44Yngc69Je1qRkHg4bfQ47a1kCUEBnn8TcDtyd4Wa9YwxyVRiKmurfyDL9rggoJw93xu8meQU="
}
Trở thành nút sản xuất
Tại cuộc bầu cử tiếp theo, các nút ứng cử viên có phiếu bầu trong 17 đầu tiên được tự động bầu làm nút sản xuất và danh sách nút sản xuất hiện tại có thể được xem thông qua các hợp đồng đồng thuận.
Số lượng 17 là số lượng nút sản xuất tối đa mặc định, có thể được sửa đổi theo đề xuất. Vui lòng tham khảo API Hợp đồng Đồng thuận và Đề xuất để biết thêm chi tiết.
aelf-command call AElf.ContractNames.Consensus GetCurrentMinerPubkeyList '{}'
Result:
{
"pubkeys": [
"0499d3bb14337961c4d338b9729f46b20de8a49ed38e260a5c19a18da569462b44b820e206df8e848185dac6c139f05392c268effe915c147cde422e69514cc927",
"048397dfd9e1035fdd7260329d9492d88824f42917c156aef93fd7c2e3ab73b636f482b8ceb5cb435c556bfa067445a86e6f5c3b44ae6853c7f3dd7052609ed40b",
"041cc962a51e7bbdd829a8855eca8a03fda708fdf31969251321cb31edadd564bf3c6e7ab31b4c1f49f0f206be81dbe68a75c70b293bf9d04d867ee5e415d3bf8a",
"04eed00eb009ccd283798e3862781cebd25ed6a4641e0e1b7d0e3b6b59025040679fc4dc0edc9de166bd630c7255188a9aeadfc832fdae0828270f77c6ef267905"
]
}
Thêm nhiều nút sản xuất hơn
Lặp lại các bước 2-4 để thêm các nút sản xuất khác. Khi số lượng nút ban đầu cộng với số lượng nút ứng cử viên vượt quá số lượng nút sản xuất tối đa, việc thay thế sẽ thay thế từng bước các nút ban đầu và các nút ban đầu được thay thế không được phép tham gia tranh cử lại. Tại thời điểm này, nút ban đầu đã hoàn thành trách nhiệm khởi động AElf Blockchain.