[
  {
    "path": ".gitignore",
    "content": ".idea\n*.log"
  },
  {
    "path": "README.md",
    "content": "# CryptoKylin-Testnet\n\nWelcome to the CryptoKylin-Testnet\n\n[点击查看中文](README_CN.md)\n\n## Dependencies\n\n- [Docker](https://docs.docker.com) Docker 17.05 or higher is required\n- [docker-compose](https://docs.docker.com/compose/) version >= 1.10.0\n\n## Clone project\n\n```\ngit clone git@github.com:cryptokylin/CryptoKylin-Testnet.git\ncd fullnode\n```\n\n## Setup a fullnode in 5 seconds using the shell\n\n```\n./run.sh\n```\n\n## Setup a fullnode manually in 1 minute\n\nThe first step, create the desired directory:\n\n```\nmkdir -p /data/eos/nodeos-data-volume/nodeos-data-kylin/data\n```\n\nThe second step is to prepare the configuration file:\n\n```\ncp -r config /data/eos/nodeos-data-volume/nodeos-data-kylin\n```\n\nThe third step, join the network:\n\n```\ndocker-compose -f docker-compose-kylin-init.yaml up -d\n```\n\n## Stop/Restart syncing\n\nTo stop:\n\n```\ndocker-compose -f docker-compose-kylin.yaml down\n```\n\nTo restart:\n\n```\ndocker-compose -f docker-compose-kylin.yaml down\ndocker-compose -f docker-compose-kylin.yaml up -d\n```\n## Chain info\n\n```\n{\n  \"chain_id\": \"5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191\"\n}\n```\n\n## P2P LIST\n\n```\np2p-peer-address = kylinnet.eosstore.link:9876\np2p-peer-address = 119.254.15.40:9876\np2p-peer-address = 39.108.231.157:23225\np2p-peer-address = p2p.kylin.eoseco.com:10000\np2p-peer-address = p2p-kylin.eoslaomao.com:443\np2p-peer-address = p2p.kylin-testnet.eospacex.com:88\np2p-peer-address = peering-kylin.eosasia.one:80\np2p-peer-address = kylin.meet.one:9876\np2p-peer-address = peer.kylin.alohaeos.com:9876\np2p-peer-address = p2p.kylin.helloeos.com.cn:9876\np2p-peer-address = kylin-testnet.starteos.io:9876\np2p-peer-address = kylin-fn001.eossv.org:443\np2p-peer-address = kylin-fn001.eossv.org:443\np2p-peer-address = api-kylin.eoshenzhen.io:9876\np2p-peer-address = p2p.kylin.eosbeijing.one:8080\np2p-peer-address = testnet.zbeos.com:9876\n```\n\n## HTTP API LIST\n\nAPI nodes:\n```\nhttp://39.108.231.157:30065/v1/chain/get_info\nhttps://api.kylin-testnet.eospacex.com/v1/chain/get_info\nhttp://api.kylin.eoseco.com/v1/chain/get_info\nhttp://178.62.36.41:8888/v1/chain/get_info\nhttps://api.kylin.alohaeos.com/v1/chain/get_info\nhttp://api.kylin.helloeos.com.cn/v1/chain/get_info\nhttps://kylin.eoscanada.com/v1/chain/get_info\nhttp://api-kylin.starteos.io/v1/chain/get_info\nhttp://api.kylin.eosbeijing.one:8880/v1/chain/get_info\nhttp://kylin-testnet.jeda.one:8888/v1/chain/get_info\nhttp://kylin.meet.one:8888/v1/chain/get_info\n```\n\nAPI nodes support get actions ( filter-on=* ):\n```\nhttps://api-kylin.eoslaomao.com/v1/chain/get_info\nhttps://api-kylin.eosasia.one/v1/chain/get_info\n```\n\n## Faucet\n\nCreating accounts on cryptokylin is pretty simple:\n\n#### Free Account\nCreate account using: http://faucet-kylin.blockzone.net/create/new_account_name\n\nExample:\n```\ncurl http://faucet-kylin.blockzone.net/create/111111111ooo\n```\n\n\n#### Get Free tokens\nGet free token with: http://faucet-kylin.blockzone.net/get_token/your_account_name.\nYou can get 100 tokens each call and max 1000 tokens per day.  \n\nExample:\n``` \ncurl http://faucet-kylin.blockzone.net/get_token/111111111ooo\n```\n\n## Backup files (Not in maintenance)\n\nFor those of you who want to sync fast to the latest block, you can use these backup files here:\n\n#### Docker version\n\n- https://storage.googleapis.com/eos-kylin-backup\n\n#### Non docker version\n\n- https://s3-ap-northeast-1.amazonaws.com/cryptokylin-eosstore/index.html\n\n### How to use backup\n#### docker version\n- First get the back-up from the https://storage.googleapis.com/eos-kylin-backup \n```\n   wget https://storage.googleapis.com/eos-kylin-backup/kylin-20181114060001.zip\n```\n- Decompress the package to the path which in your config,and modify name which in your config \n```\n   tar -zxvf kylin-20181114060001.zip -C /\n   cd /data/eos/nodeos-data-volume/\n   mv nodeos-data-eospace-kylinbackup2 nodeos-data-kylin\n```\n- Start docker \n```\n   docker-compose -f docker-compose-kylin.yaml up -d\n```\n\n#### Non docker version\n- First get the latest back-up from the https://s3-ap-northeast-1.amazonaws.com/cryptokylin-eosstore/index.html \n- Decompress the package to the path which in your nodeos's config\n- Start nodeos\n- method of operation dails:https://github.com/zsq978663747/eos-doc/blob/master/eos_block_backup_cn.md \n"
  },
  {
    "path": "README_CN.md",
    "content": "# CryptoKylin-Testnet\n\n欢迎来到 CryptoKylin-Testnet\n\n[View in English](README.md)\n\n## 依赖\n\n- [Docker](https://docs.docker.com) Docker版本 >= 17.05\n- [docker-compose](https://docs.docker.com/compose/) 版本 >= 1.10.0\n\n## 克隆项目\n\n```\ngit clone git@github.com:cryptokylin/CryptoKylin-Testnet.git\ncd fullnode\n```\n\n## 5秒之内搭建一个全节点\n\n```\n./run.sh\n```\n\n## 1分钟内手动搭建全节点\n\n第一步，创建所需要的目录:\n\n```\nmkdir -p /data/eos/nodeos-data-volume/nodeos-data-kylin/data\n```\n\n第二步，准备配置文件:\n\n```\ncp -r config /data/eos/nodeos-data-volume/nodeos-data-kylin\n```\n\n第三步，启动全节点\n\n```\ndocker-compose -f docker-compose-kylin-init.yaml up -d\n```\n\n## 暂停/重启 同步\n\n暂停:\n\n```\ndocker-compose -f docker-compose-kylin.yaml down\n```\n\n重启:\n\n```\ndocker-compose -f docker-compose-kylin.yaml down\ndocker-compose -f docker-compose-kylin.yaml up -d\n```\n## 链信息\n\n```\n{\n  \"chain_id\": \"5fff1dae8dc8e2fc4d5b23b2c7665c97f9e9d8edf2b6485a86ba311c25639191\"\n}\n```\n\n## P2P 节点列表\n\n```\np2p-peer-address = 13.125.53.113:9876\np2p-peer-address = 119.254.15.40:9876\np2p-peer-address = p2p.kylin.eoseco.com:10000\np2p-peer-address = p2p-kylin.eoslaomao.com:443\np2p-peer-address = p2p.kylin-testnet.eospacex.com:88\np2p-peer-address = peering-kylin.eosasia.one:80\np2p-peer-address = kylin.meet.one:9876\np2p-peer-address = peer.kylin.alohaeos.com:9876\np2p-peer-address = p2p.kylin.helloeos.com.cn:9876\np2p-peer-address = kylin-testnet.starteos.io:9876\np2p-peer-address = kylin-fn001.eossv.org:443\np2p-peer-address = p2p.kylin.eosbeijing.one:8080\np2p-peer-address = testnet.zbeos.com:9876\n```\n\n## HTTP API 节点列表\n\nAPI nodes:\n```\nhttp://39.108.231.157:30065/v1/chain/get_info\nhttps://api.kylin-testnet.eospacex.com/v1/chain/get_info\nhttp://api.kylin.eoseco.com/v1/chain/get_info\nhttp://13.125.53.113:8888/v1/chain/get_info\nhttp://119.254.15.40:8888/v1/chain/get_info\nhttps://api.kylin.alohaeos.com/v1/chain/get_info\nhttp://api.kylin.helloeos.com.cn/v1/chain/get_info\nhttp://api-kylin.starteos.io/v1/chain/get_info\nhttp://kylin-fn001.eossv.org/v1/chain/get_info\nhttp://api-kylin.eoshenzhen.io:8890/v1/chain/get_info\nhttp://api.kylin.eosbeijing.one:8880/v1/chain/get_info\nhttp://testnet.zbeos.com/v1/chain/get_info\n```\n\n支持 `get actions` ( filter-on=* ) 的API:\n```\nhttps://api-kylin.eoslaomao.com/v1/chain/get_info\nhttps://api-kylin.eosasia.one/v1/chain/get_info\nhttps://api-kylin.meet.one/v1/chain/get_info\n```\n\n## 水龙头\n\n在 `cryptokylin` 上创建账号非常简单:\n\n#### 免费账号\n创建免费账号: http://faucet-kylin.blockzone.net/create/new_account_name\n\n例子:\n```\ncurl http://faucet-kylin.blockzone.net/create/111111111ooo\n```\n\n#### 获得免费Token\n获得免费Token: http://faucet-kylin.blockzone.net/get_token/your_account_name.\n每一次调用能获得100EOS, 每天最多获得1000个EOS.\n\n例子:\n``` \ncurl http://faucet-kylin.blockzone.net/get_token/111111111ooo\n```\n\n## 备份文件 (不再维护)\n\n可以通过下列备份文件快速同步麒麟测试网节点:\n\n#### Docker 版本\n\n- https://storage.googleapis.com/eos-kylin-backup\n\n#### 非 docker 版本\n\n- https://s3-ap-northeast-1.amazonaws.com/cryptokylin-eosstore/index.html\n\n### 如何使用备份\n#### docker版本\n- 首先通过网址获取到最新的备份数据，例如：\n```\n   wget https://storage.googleapis.com/eos-kylin-backup/kylin-20181114060001.zip\n```\n- 在本地把数据解压到自己的配置文件中的路径下，并且修改自己配置文件中写的文件夹的名称，例如：\n```\n   tar -zxvf kylin-20181114060001.zip -C /\n   cd /data/eos/nodeos-data-volume/\n   mv nodeos-data-eospace-kylinbackup2 nodeos-data-kylin\n```\n- 启动docker \n```\n   docker-compose -f docker-compose-kylin.yaml up -d\n```\n\n#### 非docker版本\n- 首先访问网址，获取到最新的备份数据  \n- 把数据解压到自己的配置文件中的指定路径下\n- 启动nodeos程序\n- 详细操作：https://github.com/zsq978663747/eos-doc/blob/master/eos_block_backup_cn.md\n"
  },
  {
    "path": "boot.md",
    "content": "\n### boot sequence\n\n```\n# step 1: prepare config.ini and genesis.json\n\n# step 2: run nodeos\nsu eosio\nnodeos --config-dir /data/eos-config -d /data/eos-data  --genesis-json /data/eos-config/genesis.json\n\n# step 3: prepare wallet\ncleos wallet create\ncleos wallet import <eosio-private-key>\n\n# step 4: set contract eosio.bios\nCONTRACTS_FOLDER='/opt/EOS-Mainnet/eos/build/contracts'\ncleos set contract eosio ${CONTRACTS_FOLDER}/eosio.bios -p eosio\n\n# step 5: create system accounts\nfor account in eosio.bpay eosio.msig eosio.names eosio.ram eosio.ramfee eosio.saving eosio.stake eosio.token eosio.vpay\ndo\n  echo -e \"\\n creating $account \\n\";\n  cleos create account eosio ${account} EOS7hHHDtnPRbhMmfHJHUEKQyiutKrt9wZPdy1JbaATVLyxpCkrop;\n  sleep 1;\ndone\n\n# step 6: set contract\ncleos set contract eosio.token ${CONTRACTS_FOLDER}/eosio.token -p eosio.token\ncleos set contract eosio.msig ${CONTRACTS_FOLDER}/eosio.msig -p eosio.msig\n\n# step 7: create and issue token\ncleos push action eosio.token create '[\"eosio\", \"10000000000.0000 EOS\"]' -p eosio.token\ncleos push action eosio.token issue '[\"eosio\",  \"1000000000.0000 EOS\", \"cryptokylin\"]' -p eosio\n\n# setp 8: setting privileged account for eosio.msig\ncleos push action eosio setpriv '{\"account\": \"eosio.msig\", \"is_priv\": 1}' -p eosio\n\n# step 9: set contract eosio.system\ncleos set contract eosio ${CONTRACTS_FOLDER}/eosio.system -x 1000 -p eosio\n\n# step 10: create some account\ncleos system newaccount --stake-net \"10.0000 EOS\" --stake-cpu \"10.0000 EOS\" --buy-ram \"10.0000 EOS\"  eosio eosecoeoseco EOS73Th1ph7AHJz93zEmbmqNnkVkNqSuy9e3sGQRaLwxUEHJQdmB3 EOS73Th1ph7AHJz93zEmbmqNnkVkNqSuy9e3sGQRaLwxUEHJQdmB3\ncleos system newaccount --stake-net \"10.0000 EOS\" --stake-cpu \"10.0000 EOS\" --buy-ram \"10.0000 EOS\"  eosio eosbixincool EOS89A2Zktdyb3iij4aejoWLwhHjWuZjsVBGqNCwybEcfV2F2pYpR EOS6eMWsyR9ZcrT9rpRd5dzkyWnNKzs3SxzvjjkaedREwcVf1dBbx\ncleos system newaccount --stake-net \"10.0000 EOS\" --stake-cpu \"10.0000 EOS\" --buy-ram \"10.0000 EOS\"  eosio eospaceioeos EOS8LjRfkatmLxKdJiBXjyFAnFqws1gkjoWDv7xwf87WfGpBs7Z8Y EOS6vxCWyx3ryiFosCTQ6eWDdcEPvp6ebBi5CWnbz4y4ifR6GcMft\ncleos system newaccount --stake-net \"10.0000 EOS\" --stake-cpu \"10.0000 EOS\" --buy-ram \"10.0000 EOS\"  eosio eosasia11111 EOS5a5qPLuRqJgbCv1xvLUpKst4NVnhWL3kLaPQ4MeBC1GVr2ikb8 EOS5a5qPLuRqJgbCv1xvLUpKst4NVnhWL3kLaPQ4MeBC1GVr2ikb8\ncleos system newaccount --stake-net \"10.0000 EOS\" --stake-cpu \"10.0000 EOS\" --buy-ram \"10.0000 EOS\"  eosio eosstorebest EOS5F3xZaNRhDLzKRGgu5npxKQdFNBTeoSVhdyNz8WFiVXAoCmTcW EOS6GkvvJNM43iN61a4qZjLtm41c6KSW3ggJYpt8Q7CWfCyqBZ7Je\ncleos system newaccount --stake-net \"10.0000 EOS\" --stake-cpu \"10.0000 EOS\" --buy-ram \"10.0000 EOS\"  eosio eoslaomaocom EOS8hNCsEiEQzYiZY8uVxJiWGqD38VoDUNuVfS648spsftAJA87Z1 EOS8hNCsEiEQzYiZY8uVxJiWGqD38VoDUNuVfS648spsftAJA87Z1\ncleos system newaccount --stake-net \"10.0000 EOS\" --stake-cpu \"10.0000 EOS\" --buy-ram \"10.0000 EOS\"  eosio eoshuobipool EOS4xfwXh5DmXWdCJv3HFm7cnCYUGabE3itoabZBYwedNDKwA2YQU EOS4vRtWyVQezZG5tjXYNJigaaxx17ym5vR21cBG2mAuKJWBGHU1S\n\n# --  faucet accounts -- \ncleos system newaccount --stake-net \"10.0000 EOS\" --stake-cpu \"10.0000 EOS\" --buy-ram \"10.0000 EOS\"  eosio eosfaucet111 EOS8CjwFmPtGzhZEST7NTSNfoAULHTVHfrBdVJQxeSD2b3XMFHbZs EOS8TRdivFvDSVZcVPHoyMPrSmn2BajKZYoAt9af37RcWDGkntz1c\ncleos system newaccount --stake-net \"10.0000 EOS\" --stake-cpu \"10.0000 EOS\" --buy-ram \"10.0000 EOS\"  eosio eosio.faucet EOS6ZdSYBZtvZ9E3KKBbgMo75Tj787H6Cn5F5QvEGZ9A7GJzFkK6n EOS6fqxxdiuvRR8y6LdfAjKoPLVuVuHHz2wHoTqB3mVBhQQqgonef\n\n# step 11: transfer\ncleos  transfer  eosio  eosecoeoseco  \"100000000.0000 EOS\"\ncleos  transfer  eosio  eosbixincool  \"100000000.0000 EOS\"\ncleos  transfer  eosio  eospaceioeos  \"100000000.0000 EOS\"\ncleos  transfer  eosio  eosasia11111  \"100000000.0000 EOS\"\ncleos  transfer  eosio  eosstorebest  \"100000000.0000 EOS\"\ncleos  transfer  eosio  eoslaomaocom  \"100000000.0000 EOS\"\ncleos  transfer  eosio  eoshuobipool  \"100000000.0000 EOS\"\n\n\n# step 12: transfer all eosio balance to faucet account and activate the network\ncleos  transfer  eosio  eosfaucet111  \"100000000.0000 EOS\"\ncleos  transfer  eosio  eosio.faucet  \"199999730.0000 EOS\"\n\n## check eosio balance\ncleos get currency balance eosio.token eosio\n\n\n# step last: resign all system account\nfor account in eosio.bpay eosio.msig eosio.names eosio.ram eosio.ramfee eosio.saving eosio.stake eosio.token eosio.vpay\ndo\n  cleos push action eosio updateauth '{\"account\": \"'$account'\", \"permission\": \"active\", \"parent\": \"owner\", \"auth\":{\"threshold\": 1, \"keys\": [], \"waits\": [], \"accounts\": [{\"weight\": 1, \"permission\": {\"actor\": \"eosio\", \"permission\": active}}]}}' -p ${account}@active\n  cleos push action eosio updateauth '{\"account\": \"'$account'\", \"permission\": \"owner\", \"parent\": \"\",       \"auth\":{\"threshold\": 1, \"keys\": [], \"waits\": [], \"accounts\": [{\"weight\": 1, \"permission\": {\"actor\": \"eosio\", \"permission\": active}}]}}' -p ${account}@owner\n  sleep 1;\ndone\n\n## check system accounts\nfor account in eosio.bpay eosio.msig eosio.names eosio.ram eosio.ramfee eosio.saving eosio.stake eosio.token eosio.vpay\ndo\n  echo --- ${account} --- && cleos get account ${account} && sleep 1;\ndone\n\ncleos push action eosio updateauth '{\"account\": \"eosio\", \"permission\": \"active\", \"parent\": \"owner\", \"auth\":{\"threshold\": 1, \"keys\": [], \"waits\": [], \"accounts\": [{\"weight\": 1, \"permission\": {\"actor\": \"eosio.prods\", \"permission\": active}}]}}' -p eosio@active\ncleos push action eosio updateauth '{\"account\": \"eosio\", \"permission\": \"owner\", \"parent\": \"\",       \"auth\":{\"threshold\": 1, \"keys\": [], \"waits\": [], \"accounts\": [{\"weight\": 1, \"permission\": {\"actor\": \"eosio.prods\", \"permission\": active}}]}}' -p eosio@owner\n\n## check eosio\ncleos get account eosio\n```\n"
  },
  {
    "path": "config/api-config.ini",
    "content": "## CHANGE THESE\np2p-server-address = p2p.kylin-testnet.eospacex.com:88\nagent-name = \"EOSpace\"\n\n## MAYBE CHANGE THESE\nhttp-server-address = 0.0.0.0:8888\np2p-listen-endpoint = 0.0.0.0:9876\n\n## USUALLY DONT CHANGE THESE\nblocks-dir = \"blocks\"\nabi-serializer-max-time-ms = 3000\nwasm-runtime = wabt\nchain-state-db-size-mb = 65535\nreversible-blocks-db-size-mb = 1024\ncontracts-console = false\np2p-max-nodes-per-host = 1\nallowed-connection = any\nmax-clients = 100\nnetwork-version-match = 1 \nsync-fetch-span = 500\nfilter-on = *\nconnection-cleanup-period = 30\nmax-implicit-request = 1500\nhttp-validate-host = false\naccess-control-allow-origin = *\naccess-control-allow-headers = *\naccess-control-allow-credentials = false\nverbose-http-errors = true\n\nplugin = eosio::chain_api_plugin\nplugin = eosio::history_plugin\nplugin = eosio::history_api_plugin\n\n## BLACKLIST\n# actor-blacklist = \n\n## PEERS\np2p-peer-address = 13.125.53.113:9876\np2p-peer-address = 119.254.15.40:9876\np2p-peer-address = p2p.kylin.eoseco.com:10000\np2p-peer-address = p2p-kylin.eoslaomao.com:443\np2p-peer-address = p2p.kylin-testnet.eospacex.com:88\np2p-peer-address = kylin.fnp2p.eosbixin.com:443\np2p-peer-address = peering-kylin.eosasia.one:80\np2p-peer-address = kylin.meet.one:9876\np2p-peer-address = peer.kylin.alohaeos.com:9876\np2p-peer-address = p2p.kylin.helloeos.com.cn:9876\np2p-peer-address = kylin-testnet.starteos.io:9876\np2p-peer-address = kylin-fn001.eossv.org:443\np2p-peer-address = testnet.zbeos.com:9876\n"
  },
  {
    "path": "config/bp-config.ini",
    "content": "## CHANGE THESE\np2p-server-address = <CENSORED>\nagent-name = \"EOSpace\"\n\n## UNCOMMENT AND CHANGE THESE ONLY IF YOU WANT TO PRODUCE BLOCKS\nsignature-provider = EOS7TqVs7LpMzJwikiWkGTG9UGSwcQVhxP2ZKBM7FCbUwcrryNgHP=KEY:<CENSORED> #<priv-key> goes here\nproducer-name = eospaceioeos\n\n## MAYBE CHANGE THESE\nhttp-server-address = 0.0.0.0:8888\np2p-listen-endpoint = 0.0.0.0:9876\n\n## USUALLY DONT CHANGE THESE\nblocks-dir = \"blocks\"\nabi-serializer-max-time-ms = 2000\nwasm-runtime = wabt\nchain-state-db-size-mb = 65535\nreversible-blocks-db-size-mb = 1024\ncontracts-console = false\nhttps-client-validate-peers = 1\np2p-max-nodes-per-host = 1\nallowed-connection = any\nmax-clients = 25\nnetwork-version-match = 0 \nsync-fetch-span = 500\nhttp-validate-host = false\n## eosio::producer_plugin\nenable-stale-production = true\npause-on-startup = false\nmax-transaction-time = 180\nmax-irreversible-block-age = -1\nkeosd-provider-timeout = 5\n\n## BLACKLIST\n# actor-blacklist = \n\nplugin = eosio::producer_plugin\nplugin = eosio::chain_api_plugin\n## PEERS\np2p-peer-address = 13.125.53.113:9876\np2p-peer-address = 119.254.15.40:9876\np2p-peer-address = p2p.kylin.eoseco.com:10000\np2p-peer-address = p2p-kylin.eoslaomao.com:443\np2p-peer-address = p2p.kylin-testnet.eospacex.com:88\np2p-peer-address = kylin.fnp2p.eosbixin.com:443\np2p-peer-address = peering-kylin.eosasia.one:80\np2p-peer-address = kylin.meet.one:9876\np2p-peer-address = peer.kylin.alohaeos.com:9876\np2p-peer-address = p2p.kylin.helloeos.com.cn:9876\np2p-peer-address = kylin-testnet.starteos.io:9876\np2p-peer-address = kylin-fn001.eossv.org:443\np2p-peer-address = testnet.zbeos.com:9876\n"
  },
  {
    "path": "config/peer-config.ini",
    "content": "## CHANGE THESE\np2p-server-address = p2p.kylin-testnet.eospacex.com:88\nagent-name = \"EOSpace\"\n\n## MAYBE CHANGE THESE\nhttp-server-address = 0.0.0.0:8888\np2p-listen-endpoint = 0.0.0.0:9876\n\n## USUALLY DONT CHANGE THESE\nblocks-dir = \"blocks\"\nabi-serializer-max-time-ms = 3000\nwasm-runtime = wabt\nchain-state-db-size-mb = 65535\nreversible-blocks-db-size-mb = 1024\ncontracts-console = false\np2p-max-nodes-per-host = 5\nallowed-connection = any\nmax-clients = 100\nnetwork-version-match = 1\nsync-fetch-span = 500\nconnection-cleanup-period = 30\nmax-implicit-request = 1500\nhttp-validate-host = false\n\nplugin = eosio::chain_api_plugin\n\n## BLACKLIST\n# actor-blacklist = \n\n## PEERS\np2p-peer-address = 13.125.53.113:9876\np2p-peer-address = 119.254.15.40:9876\np2p-peer-address = p2p.kylin.eoseco.com:10000\np2p-peer-address = p2p-kylin.eoslaomao.com:443\np2p-peer-address = p2p.kylin-testnet.eospacex.com:88\np2p-peer-address = kylin.fnp2p.eosbixin.com:443\np2p-peer-address = peering-kylin.eosasia.one:80\np2p-peer-address = kylin.meet.one:9876\np2p-peer-address = peer.kylin.alohaeos.com:9876\np2p-peer-address = p2p.kylin.helloeos.com.cn:9876\np2p-peer-address = kylin-testnet.starteos.io:9876\np2p-peer-address = kylin-fn001.eossv.org:443\np2p-peer-address = testnet.zbeos.com:9876\np2p-peer-address = kylin.eosrio.io:39876\n"
  },
  {
    "path": "docker/eos/Dockerfile",
    "content": "FROM eosio/builder as builder\nARG branch=master\nARG symbol=SYS\n\nRUN git clone -b $branch https://github.com/EOSIO/eos.git --recursive \\\n    && cd eos && echo \"$branch:$(git rev-parse HEAD)\" > /etc/eosio-version \\\n    && cmake -H. -B\"/tmp/build\" -GNinja -DCMAKE_BUILD_TYPE=Release -DWASM_ROOT=/opt/wasm -DCMAKE_CXX_COMPILER=clang++ \\\n       -DCMAKE_C_COMPILER=clang -DCMAKE_INSTALL_PREFIX=/tmp/build -DBUILD_MONGO_DB_PLUGIN=true -DCORE_SYMBOL_NAME=$symbol \\\n    && cmake --build /tmp/build --target install\n\n\nFROM ubuntu:18.04\n\nRUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install openssl ca-certificates && rm -rf /var/lib/apt/lists/*\nCOPY --from=builder /usr/local/lib/* /usr/local/lib/\nCOPY --from=builder /tmp/build/bin /opt/eosio/bin\nCOPY --from=builder /tmp/build/contracts /contracts\nCOPY --from=builder /eos/Docker/config.ini /\nCOPY --from=builder /etc/eosio-version /etc\nCOPY --from=builder /eos/Docker/nodeosd.sh /opt/eosio/bin/nodeosd.sh\nENV EOSIO_ROOT=/opt/eosio\nRUN chmod +x /opt/eosio/bin/nodeosd.sh\nENV LD_LIBRARY_PATH /usr/local/lib\nENV PATH /opt/eosio/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  },
  {
    "path": "docker/eos/build.sh",
    "content": "#!/bin/bash\nTAG=v1.6.3\nBRANCH=v1.6.3\nnohup docker build -t cryptokylin/eos:$TAG --build-arg branch=$BRANCH --build-arg symbol=EOS . > build.log &"
  },
  {
    "path": "docker/eosmainnet/Dockerfile",
    "content": "FROM eosio/builder as builder\nARG branch=master\nARG symbol=SYS\n\nRUN git clone -b $branch https://github.com/EOS-Mainnet/eos.git --recursive \\\n    && cd eos && echo \"$branch:$(git rev-parse HEAD)\" > /etc/eosio-version \\\n    && cmake -H. -B\"/tmp/build\" -GNinja -DCMAKE_BUILD_TYPE=Release -DWASM_ROOT=/opt/wasm -DCMAKE_CXX_COMPILER=clang++ \\\n       -DCMAKE_C_COMPILER=clang -DCMAKE_INSTALL_PREFIX=/tmp/build  -DSecp256k1_ROOT_DIR=/usr/local -DBUILD_MONGO_DB_PLUGIN=true -DCORE_SYMBOL_NAME=$symbol \\\n    && cmake --build /tmp/build --target install && rm /tmp/build/bin/eosiocpp\n\n\nFROM ubuntu:18.04\n\nRUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install openssl ca-certificates && rm -rf /var/lib/apt/lists/*\nCOPY --from=builder /usr/local/lib/* /usr/local/lib/\nCOPY --from=builder /tmp/build/bin /opt/eosio/bin\nCOPY --from=builder /tmp/build/contracts /contracts\nCOPY --from=builder /eos/Docker/config.ini /\nCOPY --from=builder /etc/eosio-version /etc\nCOPY --from=builder /eos/Docker/nodeosd.sh /opt/eosio/bin/nodeosd.sh\nENV EOSIO_ROOT=/opt/eosio\nRUN chmod +x /opt/eosio/bin/nodeosd.sh\nENV LD_LIBRARY_PATH /usr/local/lib\nVOLUME /opt/eosio/bin/data-dir\nENV PATH /opt/eosio/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  },
  {
    "path": "docker/eosmainnet/build.sh",
    "content": "#!/bin/bash\nTAG=v1.1.6\nBRANCH=mainnet-1.1.6\nnohup docker build -t cryptokylin/eosmainnet:$TAG --build-arg branch=$BRANCH --build-arg symbol=EOS . > build.log &"
  },
  {
    "path": "eosio.x_contracts_update.md",
    "content": "\n##  How to update and approve eosio.contracts on Kylin Testnet \nIn order to verify the [eosio.contracts]((https://github.com/EOSIO/eosio.contracts) )'s function and security before updating them on EOS mainnet,\nAfter a new version released, we need to deploy the new contracts to the Kylin testnet for testing.\n\nNote: Automatically generated ABI files are generally incomplete and require manual modification to work properly. \nYou can refer to it [github.com/cryptokylin/eosio.contracts](https://github.com/cryptokylin/eosio.contracts)'s\nbranch [v1.4.0-fixed](https://github.com/cryptokylin/eosio.contracts/tree/v1.4.0-fixed), which complements the missing content in the ABI files.\n\n\n### Steps for propose update proposals\n``` bash\n# step 1: build eosio.contracts, check generated *.abi files and add ricardians.\ngit clone https://github.com/cryptokylin/eosio.contracts\ncd eosio.contracts && git checkout v1.4.0-fixed\n./build.sh\n\n# step 2: generate transaction json files\nhome_dir=`cd && pwd`\ntmp_dir=\"${home_dir}/tmp/eosio.contracts.v1.4.0\"\nmkdir -p ${tmp_dir} && cd ${tmp_dir}\nrepo_dir=<your eosio.contracts repo absolute directory>  # such as repo_dir='/Code/github.com/cryptokylin/eosio.contracts'\nbuild_dir=${repo_dir}/build\nalias cleos='cleos -u http://kylin.fn.eosbixin.com' \nfor c in token msig system wrap; do \\\ncleos set contract eosio.${c} ${build_dir}/eosio.${c} -j -d -s > eosio.${c}.update_tx.json; done\n\n# step 3: modify these json files.\nexpiration=\"2018-11-10T12:00:00\"        # you can set this time to three or ten days later as you want.\nfor file in `ls`; do \nsed s/.*\\\"expiration\\\":.*/\\ \\ \\\"expiration\\\":\\ \\\"${expiration}\\\",/g  ${file} |\\\nsed s/.*\\\"ref_block_num\\\":.*/\\ \\ \\\"ref_block_num\\\":\\ 0,/g                    |\\\nsed s/.*\\\"ref_block_prefix\\\":.*/\\ \\ \\\"ref_block_prefix\\\":\\ 0,/g  > ${file}.m ; done\nrm *.json\n\n# step 4: get requested_permissions json file.\n## get top 21 bp names\nbps=`cleos system listproducers -l 21 | head -n 22 |tail -n 21 | cut -d ' ' -f1`\n\n## generate permissions.json\nf=permissions.json && i=0\necho [ > ${f}\nfor name in ${bps}; do                                                          \\\n    i=$(($i+1)) &&                                                              \\\n    echo -n \"  {\\\"actor\\\": \\\"${name}\\\", \\\"permission\\\": \\\"active\\\"}\" >> ${f} && \\\n    if [ \"$i\" -ne \"21\" ]; then echo , >> ${f}; fi                               \\\n;done\necho >> ${f} && echo ] >> ${f}\ncat ${f}\n\n# step 5: create proposals\ncleos multisig propose_trx updatesysct1 permissions.json eosio.msig.update_tx.json.m   eosstorebest\ncleos multisig propose_trx updatesysct2 permissions.json eosio.system.update_tx.json.m eosstorebest\ncleos multisig propose_trx updatesysct3 permissions.json eosio.token.update_tx.json.m  eosstorebest\ncleos multisig propose_trx updatesysct4 permissions.json eosio.wrap.update_tx.json.m   eosstorebest\n```\n\n### Send the following message to top 21 bps.\n\nHi Top 21 BPs, https://github.com/EOSIO/eosio.contracts released a new version of v1.4.0 . \nI compiled the contracts and proposed several update proposals.\n\nYou can check the source code at https://github.com/cryptokylin/eosio.contracts/tree/v1.4.0-fixed ,\nhere I just complete these ABI files and without any other modification.\n\nYou can use the following commands to see the contents of the proposals.\n \nalias cleos='cleos -u http://kylin.fn.eosbixin.com'   \ncleos multisig review eosstorebest updatesysct1  \ncleos multisig review eosstorebest updatesysct2  \ncleos multisig review eosstorebest updatesysct3  \ncleos multisig review eosstorebest updatesysct4  \n\nYou can check the approved status by following cmds.  \nTo get proposal updatesysct1's status:  \ncleos get table eosio.msig eosstorebest approvals | jq '.rows[]|select(.proposal_name==\"updatesysct1\")'  \n\nIf you confirm it, you can pass the validation.  \nI set \"expiration\": \"2018-11-10T12:00:00\" in every proposal, so if it's ok, approve it before that time please.  \n\ncleos multisig approve eosstorebest updatesysct1 '{\"your-bp-name\":\"active\"}' -p your-bp-name  \n\nand other proposals: updatesysct2 updatesysct3 updatesysct4;  \n\n(the Kylin Testnet's current system contracts version is v1.3.1)  \n\n\n### Execute proposal when get enough approves.\n``` bash\ncleos multisig exec eosstorebest updatesysct1 -p eosstorebest\n## and other proposals: updatesysct2 updatesysct3 updatesysct4;\n```\n"
  },
  {
    "path": "fullnode/config/config.ini",
    "content": "## MAYBE CHANGE THESE\nhttp-server-address = 0.0.0.0:8888\np2p-listen-endpoint = 0.0.0.0:9876\n\n## USUALLY DONT CHANGE THESE\nblocks-dir = \"blocks\"\nabi-serializer-max-time-ms = 3000\nwasm-runtime = wabt\nchain-state-db-size-mb = 65535\nreversible-blocks-db-size-mb = 1024\ncontracts-console = false\np2p-max-nodes-per-host = 1\nallowed-connection = any\nmax-clients = 100\nnetwork-version-match = 1 \nsync-fetch-span = 500\nfilter-on = *\nconnection-cleanup-period = 30\nmax-implicit-request = 1500\nhttp-validate-host = false\naccess-control-allow-origin = *\naccess-control-allow-headers = *\naccess-control-allow-credentials = false\nverbose-http-errors = true\n\nplugin = eosio::chain_api_plugin\nplugin = eosio::history_plugin\nplugin = eosio::history_api_plugin\n\n## BLACKLIST\n# actor-blacklist = \n\n## PEERS\np2p-peer-address = kylinnet.eosstore.link:9876\np2p-peer-address = 119.254.15.40:9876\np2p-peer-address = 39.108.231.157:23225\np2p-peer-address = p2p.kylin.eoseco.com:10000\np2p-peer-address = p2p-kylin.eoslaomao.com:443\np2p-peer-address = p2p.kylin-testnet.eospacex.com:88\np2p-peer-address = kylin.fnp2p.eosbixin.com:443\np2p-peer-address = peering-kylin.eosasia.one:80\np2p-peer-address = kylin.meet.one:9876\np2p-peer-address = peer.kylin.alohaeos.com:9876\np2p-peer-address = p2p.kylin.helloeos.com.cn:9876\np2p-peer-address = kylin-testnet.starteos.io:9876\np2p-peer-address = kylin-fn001.eossv.org:443\np2p-peer-address = kylin-fn001.eossv.org:443\np2p-peer-address = api-kylin.eoshenzhen.io:9876\np2p-peer-address = p2p.kylin.eosbeijing.one:8080\np2p-peer-address = testnet.zbeos.com:9876\n"
  },
  {
    "path": "fullnode/config/genesis.json",
    "content": "{\n  \"initial_timestamp\": \"2018-07-11T05:30:00.000\",\n  \"initial_key\": \"EOS7hHHDtnPRbhMmfHJHUEKQyiutKrt9wZPdy1JbaATVLyxpCkrop\",\n  \"initial_configuration\": {\n    \"max_block_net_usage\": 1048576,\n    \"target_block_net_usage_pct\": 1000,\n    \"max_transaction_net_usage\": 524288,\n    \"base_per_transaction_net_usage\": 12,\n    \"net_usage_leeway\": 500,\n    \"context_free_discount_net_usage_num\": 20,\n    \"context_free_discount_net_usage_den\": 100,\n    \"max_block_cpu_usage\": 200000,\n    \"target_block_cpu_usage_pct\": 1000,\n    \"max_transaction_cpu_usage\": 150000,\n    \"min_transaction_cpu_usage\": 100,\n    \"max_transaction_lifetime\": 3600,\n    \"deferred_trx_expiration_window\": 600,\n    \"max_transaction_delay\": 3888000,\n    \"max_inline_action_size\": 4096,\n    \"max_inline_action_depth\": 4,\n    \"max_authority_depth\": 6\n  }\n}"
  },
  {
    "path": "fullnode/docker-compose-kylin-init.yaml",
    "content": "version: \"3\"\n\nservices:\n  nodeosd:\n    image: cryptokylin/eos:v1.4.4\n    command: /opt/eosio/bin/nodeos --data-dir=/data --genesis-json=/etc/nodeos/genesis.json --config-dir=/etc/nodeos --delete-all-blocks\n    hostname: nodeosd\n    ports:\n      - 8890:8888\n      - 9878:9876\n    expose:\n      - \"8888\"\n    volumes:\n      - /data/eos/nodeos-data-volume/nodeos-data-kylin/config:/etc/nodeos\n      - /data/eos/nodeos-data-volume/nodeos-data-kylin/data:/data"
  },
  {
    "path": "fullnode/docker-compose-kylin.yaml",
    "content": "version: \"3\"\n\nservices:\n  nodeosd:\n    image: cryptokylin/eos:v1.4.4\n    command: /opt/eosio/bin/nodeos --data-dir=/data --config-dir=/etc/nodeos\n    hostname: nodeosd\n    ports:\n      - 8890:8888\n      - 9878:9876\n    expose:\n      - \"8888\"\n    volumes:\n      - /data/eos/nodeos-data-volume/nodeos-data-kylin/config:/etc/nodeos\n      - /data/eos/nodeos-data-volume/nodeos-data-kylin/data:/data"
  },
  {
    "path": "fullnode/run.sh",
    "content": "#!/bin/bash\n\nDATA_DIR=/data/eos/nodeos-data-volume/nodeos-data-kylin\nmkdir -p $DATA_DIR/data\ncp -r config $DATA_DIR\n\ndocker-compose -f docker-compose-kylin-init.yaml up -d"
  },
  {
    "path": "genesis.json",
    "content": "{\n  \"initial_timestamp\": \"2018-07-11T05:30:00.000\",\n  \"initial_key\": \"EOS7hHHDtnPRbhMmfHJHUEKQyiutKrt9wZPdy1JbaATVLyxpCkrop\",\n  \"initial_configuration\": {\n    \"max_block_net_usage\": 1048576,\n    \"target_block_net_usage_pct\": 1000,\n    \"max_transaction_net_usage\": 524288,\n    \"base_per_transaction_net_usage\": 12,\n    \"net_usage_leeway\": 500,\n    \"context_free_discount_net_usage_num\": 20,\n    \"context_free_discount_net_usage_den\": 100,\n    \"max_block_cpu_usage\": 200000,\n    \"target_block_cpu_usage_pct\": 1000,\n    \"max_transaction_cpu_usage\": 150000,\n    \"min_transaction_cpu_usage\": 100,\n    \"max_transaction_lifetime\": 3600,\n    \"deferred_trx_expiration_window\": 600,\n    \"max_transaction_delay\": 3888000,\n    \"max_inline_action_size\": 4096,\n    \"max_inline_action_depth\": 4,\n    \"max_authority_depth\": 6\n  }\n}"
  }
]