Pag implementa sa hurisdiksyonal na agility sa loob ng BEOS blockchain

in #blockchain5 years ago

This translation is also available in English/Ingles and is Authorized to translate the selected post.


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 nasasakupan
  • updateprod - 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 hurisdiksyon 0,
  • [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

Sort:  

Translation Payout