Pagpatutupad ng Hurisdiksyonal na Agility sa loob ng BEOS blockchain
Paunang salita: Ilang sandali pa ay gumawa ako ng isang pambungad na post na naglalarawan kung paano
ang jurisdictional agility (ang kakayahan para sa mga gumagamit ng blockchain na pumili kung saan ang nasasakupan ng kanilang transaksyon ay naganap sa loob ng isang network na ipinamamahagi sa heograpiya) mga gawain sa loob ng BEOS blockchain. Ito ay isang follow-up post na naglalarawan kung paano ipinatupad ang pag-andar na ito sa BEOS at pangunahing inilaan para sa isang teknikal na madla (mga filipino na blockchain na arkitekto at mga programmer).
Ang pagpamahala ng blockc producer hurisdiksyon sa BEOS
Maaaring mailathala ng mga prodyuser ng block ang mga rehiyon (isa o higit pang mga hurisdiksyon) kung saan matatagpuan ang mga ito, at maaaring tukuyin ng mga gumagamit ang isa o higit pang mga hurisdiksyon na rehiyon kung saan mapoproseso ang kanilang transaksyon.
Ang isang hurisdiksyon ng BEOS ay tinukoy ng isang natatanging id code (uint16), isang natatanging pangalan (isang maliit na string ng mas mababa sa 256 na character), at isang paglalarawan (isang string na mas mababa sa 256 na character). Ang mga hurisdiksyon ay nakaimbak bilang data ng blockchain sa dalawang C ++ multi-index: jurisdiction_dictionary_object at kabilang ang jurisdiction_producer_object.
Ang BEOS ay may isang kawalan na listahan ng mga nasasakupan para sa mga bansa batay sa ISO 3166 na code ng bansa kasama ang European Union (code 10000) at International Waters ( code 10001). Ang mga karagdagang hurisdiksyon ay maaaring nilikha sa pamamagitan ng "burning" 1000 BEOS (bayad sa eosio.null).
Ang software ng blockchain para sa kakayahang hurisdiksyon ay walang alam tungkol sa mga lohikal na asosasyon sa pagitan ng mga nasasakupan. Halimbawa, hindi alam ng blockchain na ang Warsaw ay matatagpuan sa Poland. Kaya ang isang tagagawa ng block (BP) ay dapat na hiwalay na i-publish na ito ay sa Warsaw, Poland, at ang European Union upang ma-proseso ang mga transaksyon na nakalaan para sa lahat ng tatlong mga nasasakupang ito.
Ang isang BP ay maaaring baguhin ang mga nasasakupang batas nito sa dalawang paraan: 1) direktang tumatawag sa pag-update ng update sa kilos ng eosio.system kasama ang hanay ng mga code ng hurisdiksyon o 2) sa pamamagitan ng pagtawag sa update_jurisdiction aksyon na tinukoy sa opsyonal na gps isaksak. Pinapayagan ng huli na pamamaraan na ito ang isang mobile na BP (hal. Isang tagagawa ng block sa isang barko) na gumamit ng isang gps na tatanggap upang makuha ang kasalukuyang mga coordinate nito pagkatapos ay tawagan ang update_jurisdiction upang ma-convert ang mga geo coordinates sa isa o higit pang mga hurisdiksyon na naglalaman ng mga tugmaan.
Kung ang isang BP ay nagpapanatili ng mga node ng BP sa maraming mga hurisdiksyon (hal. Isang node sa US at isang node sa Tsina), dapat nilang i-payhayag lamang ang hurisdiksyon (mga) node na gagawa ng kanilang paparating na bloke. Nagdaragdag ito ng katalagahan sa mga gumagamit tungkol sa kung anong mga nasasakupan ang magagamit sa paparating na pag-ikot ng mga bloke at ginagawang posible upang matukoy kung anong hurisdiksyon ang ginamit upang makagawa ng anumang bloke batay lamang sa kasaysayan ng hurisdiksyon na inilathala ng mga block producer.
eosio.system mga aksyon sa kontrata para sa pamamahala ng mga hurisdiksyon
Ang mga ganap ng eosio.system sa ibaba ay tinawag ng mga block producer upang magdagdag ng mga bagong hurisdiksyon at tukuyin ang kanilang mga hurisdiksyon.
void addjurisdict( account_name ram_payer, code_jurisdiction new_code, std::string new_name, std::string new_description )
void updateprod( eosio::jurisdiction_producer data )
addjurisdict
- nagdaragdag ng isang hurisdiksyon sa diksyunaryo ng nasasakupanupdateprod
- i-update ang mga hurisdiksyon para sa naibigay na ani
struct jurisdiction_producer {
account_name producer;
std::vector< code_jurisdiction > jurisdictions;
};
Ang kontrata ng eosio.system
ay mayroon ding mga espesyal na aksyon na maaari lamang gawin ng may-ari ng kontrata. Ang mga pagkilos na ito ay para sa pagsasaayos ng blockchain (halimbawa, upang mai-configure ang mga nasasakupang hurisdiksyon una at itakda ang bayad para sa paglikha ng mga bagong mga hurisdiksyon).
void addmultijurs(std::vector<new_jurisdic_info> new_jurisdicts)
void updatejurfee(asset quantity)
void updatejuracc(account_name target_account)
Pag-encode ng isang kinakailangan sa Hurisdiksyon sa isang transaksyon sa BEOS
Ang class na transaction
ay may data member na extensions_type transaction_extensions
.
kunsa saan ang extensions_type: std::vector<extension_storage>
Paglalarawan sa extension_storage
- uint16_t - type of data: always
0
- std::vector - codes of jurisdictions
struct extension_storage
{
uint16_t type;
std::vector<char> data;
};
Kung ang extensions_type ay walang laman, ipinapahiwatig nito na ang ibinigay na transaksyon ay walang kinakailangang hurisdiksyon. Ito ang default na gawain.
Hurisdiksyon API plugin
Ang bagong hursidiksyon na API Plugin ay nagbibigay ng mga tawag sa API na kinakailangan upang suportahan ang likas na hurisdiksyon. Ginagawa nito ang mga sumusunod na tawag sa API:
get_active_jurisdictions
Nilalista ng pamamaraang ito ang lahat ng hurisdiksyon magagamit sa mga aktibong node ng prodyuser.
Mga Parametro:
{
"limit" : 1000
}
limit
default value is 1000.
Paggamit:
- Kunin ang aktibong hurisdiksyon
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction/get_active_jurisdictions -X POST -d '{}'
- Kunin ang unang 100 na aktibong hurisdiksyon
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction/get_active_jurisdictions -X POST -d '{"limit" : 100}'
Return:
{
"jurisdictions":[0]
}
get_producer_jurisdiction
Ang pamamaraang ito ay naglilista ng lahat ng mga hurisdiksyon para sa isang naibigay na produsyer.
Usage:
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction/get_producer_jurisdiction -X POST -d '{"producer_names":["eosio"]}'
Return:
{
"producer_jurisdictions":[
{"producer":"eosio","jurisdictions":[0]}
]
}
get_all_jurisdictions
Inililista ng pamamaraang ito ang lahat ng hurisdiksyon na tinukoy sa systema.
Mga Parametro:
{
"limit" : 1000,
"last_code" : 50
}
limit
at last_code
are opsyonal. limit
default value i ay 1000. last_code
ay para suportahin ang mga iskema ng paginasyon, na ma igawa sa code sa simula pa.
Example Usage of API calls:
- List all jurisdictions up to query limit (1000).
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction/get_all_jurisdictions -X POST -d '{}'
- Ilista ang lahat ng mga hurisdiksyon hanggang sa limitasyon ng query (1000).
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction/get_all_jurisdictions -X POST -d '{"limit":100}'
- Ilista ang lahat ng mga nasasakupan na may limitasyon sa query na nakatakda sa 100 simula sa code 50.
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction/get_all_jurisdictions -X POST -d '{"limit":100, "last_code" : 50}'
Return:
{
"jurisdictions":[
{"code":50,"name":"poland","description":"EAST EUROPE"},
{"code":51,"name":"germany","description":"EAST EUROPE"}
]
}
Bagong hurisdiksyon na kasaysayan na API plugin
Ang opsyonal na plugin na ito ay idinagdag upang subaybayan ang mga pagbabago sa hurisdiksyon ng mga bloke. Hindi kinakailangan para sa isang node na kumikilos lamang bilang isang block produsyer, ngunit dapat itong paganahin para sa isang node ng API.
Upang paganahin ang kasaysayan ng hurisdiksyon para sa mga tagagawa ng bloke, dapat mong idagdag ang linyang ito sa config.ini
ng iyong BEOS node:
enable-jurisdiction-history = true
Sinusuportahan ng API ng kasaysayan ng hurisdiksyon ang mga tawag sa API na inilarawan sa ibaba:
get_all_producer_jurisdiction_for_block
Ini-return ang lahat na impormasyon tungkol sa mga hurisdiksyon para sa produsyer na ibinigay na bloke.
Arguments:
{
"block_number" : 1000
}
Ang argumentong block_number
ay opsyonal. Bilang default, ginagamit ang kasalukuyang block ng ulo kung walang tinukoy na numero ng bloke.
Returns:
{
"producer_jurisdiction_for_block": [{
"producer_name": "beos.proda",
"block_with_last_change": 143,
"date_changed": "2019-06-17T13:30:55.500",
"new_jurisdictions": [1, 2, 3]
}, {
"producer_name": "beos.prodb",
"block_with_last_change": 149,
"date_changed": "2019-06-17T13:30:58.500",
"new_jurisdictions": [11, 12, 13]
}]
}
Curl call na halimbawa:
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction_history/get_all_producer_jurisdiction_for_block -X POST -d '{"block_number":2000}'
get_producer_jurisdiction_for_block
Ini-return ang impormasyon tungkol sa hurisdiksyon para sa produsyer na ibinigay na bloke.
Arguments:
{
"producer" : "eosio",
"block_number" : 1000
}
Returns:
{
"producer_jurisdiction_for_block" : [
{
"producer_name" : "eosio",
"block_with_last_change" : 700,
"date_changed" : "2019-06-07T09:00",
"new_jurisdictions" : [1,2]
}
]
}
Curl call na halimbawa:
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction_history/get_producer_jurisdiction_for_block -X POST -d '{"producer":"eosio","block_number":1000}'
get_producer_jurisdiction_history
Ang pamamaraang ito ay nagbabalik sa mga pagbabago sa hurisdiksyon para sa isang naibigay na tagagawa sa isang naibigay na tagal ng panahon. Opsyonal ang from_date
atto_date
Kung ang from_date
ay hindi tinukoy, nakatakda ito sa simula ng panahon. Kung ang to_date
ay hindi tinukoy, nakatakda ito sa kasalukuyang oras.
Arguments:
{
"producer" : "eosio",
"from_date" : "2019-06-07T09:00",
"to_date" : "2019-06-07T10:00"
"limit" : 1000
}
limit
ito ay opsyonal, na i-set sa takda hanggang 1000.
Returns:
{
"producer_jurisdiction_history" : [
{
"producer_name" : "eosio",
"block_number" : 700,
"date_changed" : "2019-06-07T09:00",
"new_jurisdictions" : [1,2]
},
{
"producer_name" : "eosio",
"block_number" : 1200,
"date_changed" : "2019-06-07T09:01",
"new_jurisdictions" : [3]
},
]
}
Curl call na halimbawa:
- Kunin ang lahat ng mga pagbabago sa isang naibigay na tagal ng oras.
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction_history/get_producer_jurisdiction_history -X POST -d '{"producer":"eosio","from_date":"2019-06-07T09:00","to_date":"2019-06-07T10:00"}'
- Kumuha ng unang 100 mga pagbabago sa isang naibigay na tagal ng oras.
curl -H "CONTENT-TYPE:application/json" --url 127.0.0.1:8888/v1/jurisdiction_history/get_producer_jurisdiction_history -X POST -d '{"producer":"eosio","from_date":"2019-06-07T09:00","to_date":"2019-06-07T10:00", "limit":100}'
Ang mga pagbabago ng CLEOS (command-line wallet) upang suportahan ang likas na nasasakupan
Ang isang bagong switch ay naidagdag sa utos ng pitaka na `cleos push aksyon / transaksyon / transaksyon 'upang tukuyin kung saan dapat gawin ang mga (mga) transaksyon sa hurisdiksyon:
-u, - hurisdiksyon TEXT
- itakda ang pinapayagan na mga code ng hurisdiksyon para sa transaksyon (isang maximum na 255 pinapayagan na mga hurisdiksyon ay maaaring tinukoy), default ay anu man.
Halimbawa sa paggamit ng opsyonal na hurisdiksyon na switch
Upang tukuyin kung aling hurisdiksyon ang dapat gawin ng isang transaksyon, kailangan mong idagdag ang `-u, - switch ng hurisdiksyon. Nasa ibaba ang ilang halimbawa ng paggamit:
./cleos push action --jurisdictions '[0]' eosio.token transfer '[ "xxx", "yyy", "0.0001 BTS", "HI" ]' -p xxx
./cleos push action --u '[0]' eosio.token transfer '[ "xxx", "yyy", "0.0001 BTS", "HI" ]' -p xxx
./cleos push action --jurisdictions '[0,1,2,3,4]' eosio.token transfer '[ "xxx", "yyy", "0.0001 BTS", "HI" ]' -p xxx
./cleos push action --u '[0,1,2,3,4]' eosio.token transfer '[ "xxx", "yyy", "0.0001 BTS", "HI" ]' -p xxx
Sa mga halimbawa sa itaas, maraming mga hanay ng pinahihintulutang mga nasasakupan ay tinukoy:
[0]
- ang transaksyon na ito ay isasagawa lamang sa hurisdiksyon0
,[0,1,2,3,4] - ang transaksyong ito ay isinasagawa sa isa sa mga sumusunod na nasasakupan na
0,1,2,3,4`.
Bagong get
sub-commands
Upang makakuha ng impormasyon tungkol sa mga nasasakupang batas mula sa cleos
, maraming mga bagong sub get sub-utos ang naidagdag:
all_jurisditions
- Kunin ang lahat ng mga hurisdiksyon mula sa blockchain,active_jurisditions
- Kunin ang mga aktibong hurisdiksyon mula sa blockchain,producer_jurisdiction
- Kunin ang mga hurisdiksyon para sa ibinigay na tagagawa mula sa blockchain,all_producer_jurisdiction_for_block
- Kunin ang lahat ng mga hurisdiksyon para sa lahat ng tagagawa sa ibinigay na bloke mula sa blockchain,producer_jurisdiction_for_block
- Kunin ang mga nasasakupan para sa tagagawa sa ibinigay na bloke mula sa blockchain,producer_jurisdiction_history
- Kunin ang kasaysayan ng mga hurisdiksyon para sa tagagawa mula sa blockchain.
Command all_jurisdictions
Makukuha ng utos na ito ang lahat ng mga hurisdiksyon mula sa blockchain, halimbawa:
./cleos get all_jurisdictions
mai-return:
{
"jurisdictions":[
{"code":0,"name":"poland","description":"EAST EUROPE"},
{"code":1,"name":"germany","description":"EAST EUROPE"}
]
}
Command active_jurisdictions
Makukuha ng utos na ito ang mga aktibong hurisdiksyon mula sa blockchain, halimbawa:
./cleos get active_jurisdictions
mai-return:
{
"jurisdictions":[0]
}
Command producer_jurisdiction
Makukuha ng utos na ito ang mga nasasakupan para sa mga naibigay na tagagawa mula sa blockchain, halimbawa:
./cleos get producer_jurisdiction '["eosio"]'
mai-return:
{
"producer_jurisdictions":[
{"producer":"eosio","jurisdictions":[0]}
]
}
Command all_producer_jurisdiction_for_block
kukunin ng kanyang utos ang lahat ng mga hurisdiksyon para sa lahat ng tagagawa sa ibinigay na bloke mula sa blockchain, halimbawa:
./cleos get all_producer_jurisdiction_for_block "1000"
mai-return:
{
"producer_jurisdiction_for_block": [{
"producer_name": "beos.proda",
"block_with_last_change": 143,
"date_changed": "2019-06-17T13:30:55.500",
"new_jurisdictions": [1, 2, 3]
}, {
"producer_name": "beos.prodb",
"block_with_last_change": 149,
"date_changed": "2019-06-17T13:30:58.500",
"new_jurisdictions": [11, 12, 13]
}]
}
Command producer_jurisdiction_for_block
Ang utos na ito ay kukuha ng mga hurisdiksyon para sa tagagawa sa ibinigay na bloke mula sa blockchain, halimbawa:
./cleos get producer_jurisdiction_for_block "eosio" 1000
mai-return:
{
"producer_jurisdiction_history" : [
{
"producer_name" : "eosio",
"block_number" : 700,
"date_changed" : "2019-06-07T09:00",
"new_jurisdictions" : [1,2]
},
{
"producer_name" : "eosio",
"block_number" : 1200,
"date_changed" : "2019-06-07T09:01",
"new_jurisdictions" : [3]
},
]
}
Command producer_jurisdiction_history
Makukuha ng utos na ito ang kasaysayan ng mga hurisdiksyon para sa tagagawa mula sa blockchain, halimbawa:
./cleos get producer_jurisdiction_history "eosio" "2019-06-07T09:00" "2019-06-07T10:00"
mai-return:
{
"producer_jurisdiction_history" : [
{
"producer_name" : "eosio",
"block_number" : 700,
"date_changed" : "2019-06-07T09:00",
"new_jurisdictions" : [1,2]
},
{
"producer_name" : "eosio",
"block_number" : 1200,
"date_changed" : "2019-06-07T09:01",
"new_jurisdictions" : [3]
},
]
}
Nakatakda ngayon sa EOS blockchain
Ang lahat ng mga pag-gana sa itaas ay ganap na nakatakda sa pinakabagong bersyon ng BEOS blockchain. Sama-sama, pinapagana nila ang parehong mga nakatigil at mobile block producer na mai-publish ang kasalukuyang mga hurisdiksyon kung saan pinapatakbo nila at para sa mga gumagamit ng blockchain na pumili at pumili sa mga magagamit na hurisdiksyon upang tukuyin kung saan nais nilang maganap ang kanilang mga transaksyon.
Matatagpuan ang na-update na blockchain code sa:
https://github.com/terradacs/beos-core/tree/beos-jurisdiction-dev
Translation Payout