tokamak-network / docs.tokamak.network Goto Github PK
View Code? Open in Web Editor NEWTokamak Network Documentations
Home Page: https://docs.tokamak.network/
Tokamak Network Documentations
Home Page: https://docs.tokamak.network/
Make more code highlighting
After coming back to original PowerTON(3aebfa
at docs/economics
branch). Need to change game rules about delay of issuing power from staked TON. It must be changed to issue power as soon as staking.
plasma-evm $ build/bin/geth staking balances 0x3cd9f729c8d882b851f8c70fb36d22b391a288cd \
--datadir ./.pls.staking/operator1 \
--rootchain.url ws://127.0.0.1:8546 \
--operator 0x3cd9f729c8d882b851f8c70fb36d22b391a288cd
INFO [03-22|02:54:33.012] Maximum peer count ETH=50 LES=0 total=50
INFO [03-22|02:54:33.013] Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"
ERROR[03-22|02:54:33.013] Failed to enumerate USB devices hub=ledger vendor=11415 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|02:54:33.013] Failed to enumerate USB devices hub=trezor vendor=21324 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|02:54:33.013] Failed to enumerate USB devices hub=trezor vendor=4617 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|02:54:33.014] Failed to enumerate USB devices hub=ledger vendor=11415 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|02:54:33.014] Failed to enumerate USB devices hub=trezor vendor=21324 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|02:54:33.014] Failed to enumerate USB devices hub=trezor vendor=4617 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
INFO [03-22|02:54:33.966] Operator account is unlocked address=0x71562b71999873DB5b286dF957af199Ec94617F7
INFO [03-22|02:54:33.966] Set options for submitting a block mingaspirce=1000000000 maxgasprice=100000000000 resubmit=0s
INFO [03-22|02:54:33.966] cfg.Node.DataDir v=.pls.staking/manager/geth/genesis.json
INFO [03-22|02:54:33.967] Allocated cache and file handles database=/home/ubuntu/plasma-evm/stake/.pls.staking/manager/geth/stakingdata cache=16.00MiB handles=16
INFO [03-22|02:54:33.982] Using manager contracts TON=0x772F9dd7c0e7ac2397600614540581D953811742 WTON=0x319b4b3b71398EABaDae47ccEA2e1e6be3e83056 DepositManager=0x4073A7Dc5dDF0d9aa50Eff184224c928c4304369 RootChainRegistry=0xBeE64cB1c6F569BAC8a143518bDf4E061150caFB SeigManager=0x5dd3b493c018519303654A439129EA01197bA012
open .pls.staking/manager/geth/genesis.json: no such file or directory
I have updated script (tokamak-network/dashboard.tokamak.network#28 (comment))
I think docs need to be updated.
latest scripts:
https://www.notion.so/onther/plasma-evm-0-0-0-rc5-7-scripts-plasma-evm-staking-command-line-64ab838f74cb4f6981a40f324c70f4f8
It does not work. Below is the result of the command.
~/go-ethereum$ bash run.rootchain.sh
run.rootchain.sh: line 15: make: command not found
plasma-evm $ make geth && build/bin/geth --nousb manage-staking deployManagers 10 1.5 \
--datadir ./.pls.staking/manager \
--rootchain.url ws://127.0.0.1:8546 \
--unlock 0x71562b71999873DB5b286dF957af199Ec94617F7 \
--password pwd.pass \
--rootchain.sender 0x71562b71999873DB5b286dF957af199Ec94617F7
INFO [04-04|20:10:16.330] Maximum peer count ETH=50 LES=0 total=50
INFO [04-04|20:10:16.331] Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"
INFO [04-04|20:10:16.352] Set options for submitting a block mingaspirce=1000000000 maxgasprice=100000000000 resubmit=0s
INFO [04-04|20:10:17.288] Unlocked account address=0x71562b71999873DB5b286dF957af199Ec94617F7
INFO [04-04|20:10:17.288] Root chain transaction sender found address=0x71562b71999873DB5b286dF957af199Ec94617F7
INFO [04-04|20:10:17.289] Allocated cache and file handles database=/home/ubuntu/datadir2/geth/stakingdata cache=16.00MiB handles=16
INFO [04-04|20:10:17.303] 1. deploy TON contract
INFO [04-04|20:10:19.325] TON deployed addr=0x3Dc2cd8F2E345951508427872d8ac9f635fBe0EC tx=f55701…183657
INFO [04-04|20:10:19.326] 2. deploy WTON contract
INFO [04-04|20:10:21.341] WTON deployed addr=0xe213D8b68cA3d01e51a6dBA669De59AC9A8359eE tx=699625…3f4867
INFO [04-04|20:10:21.342] 3. deploy RootChainRegistry
INFO [04-04|20:10:23.349] RootChainRegistry deployed addr=0xD91Fb8750Ea1decEf4cEE9D8314f4a60DE039457 tx=15da76…6de08c
INFO [04-04|20:10:23.350] 4. deploy DepositManager
INFO [04-04|20:10:25.361] DepositManager deployed addr=0x2139B5Baf855EEE55Cdb5F19dF50583585581EaD tx=91fdf4…242ea0
INFO [04-04|20:10:25.361] 5. deploy SeigManager
Failed to deploy SeigManager: failed to estimate gas needed: gas required exceeds allowance (7500000) or always failing transaction
@4000D suggested updating docs for stamina
flag as followed.
geth deploy <genesisPath> <chainId> <withPETH> <NRELength>
command)PLASMA EVM - STAMINA OPTIONS:
--stamina.operatoramount value Operator stamina amount at genesis block in ETH (default: 1)
--stamina.mindeposit value Minimum deposit amount in ETH (default: 0.5)
--stamina.recoverepochlength value The length of recovery epoch in block (default: 120960)
--stamina.withdrawaldelay value Withdrawal delay in block (default: 362880)
2. Stamina Contract Address: 0x000000000000000000000000000000000000dead (source: params/plasma_params.go#L14)
3. Stamina Contract Github Repo: https://github.com/Onther-Tech/stamina
"특정한 행동"이라는 단어가 쓰인 맥락? 조금 어색해 보여요. @aiden0505
plasma-evm $ build/bin/geth deploy ./.pls.staking/operator1/operator1_genesis.json 1021 true 2 \
--datadir ./.pls.staking/operator1 \
--rootchain.url ws://127.0.0.1:8546 \
--dev.key bfaa65473b85b3c33b2f5ddb511f0f4ef8459213ada2920765aaac25b4fe38c5 \
--operator 0x3cd9f729c8d882b851f8c70fb36d22b391a288cd
INFO [03-22|05:00:02.848] Maximum peer count ETH=50 LES=0 total=50
INFO [03-22|05:00:02.848] Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"
ERROR[03-22|05:00:02.877] Failed to enumerate USB devices hub=ledger vendor=11415 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|05:00:02.878] Failed to enumerate USB devices hub=trezor vendor=21324 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|05:00:02.878] Failed to enumerate USB devices hub=trezor vendor=4617 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|05:00:02.878] Failed to enumerate USB devices hub=ledger vendor=11415 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|05:00:02.878] Failed to enumerate USB devices hub=trezor vendor=21324 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|05:00:02.878] Failed to enumerate USB devices hub=trezor vendor=4617 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|05:00:03.926] Failed to enumerate USB devices hub=trezor vendor=4617 failcount=3 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|05:00:03.945] Failed to enumerate USB devices hub=ledger vendor=11415 failcount=3 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[03-22|05:00:03.945] Failed to enumerate USB devices hub=trezor vendor=21324 failcount=3 err="failed to initialize libusb: libusb: unknown error [code -99]"
INFO [03-22|05:00:05.008] Unlocking developer account address=0x3cD9F729C8D882B851F8C70FB36d22B391A288CD
INFO [03-22|05:00:06.838] Operator account is unlocked address=0x3cD9F729C8D882B851F8C70FB36d22B391A288CD
INFO [03-22|05:00:06.838] Set options for submitting a block mingaspirce=1000000000 maxgasprice=100000000000 resubmit=0s
INFO [03-22|05:00:06.839] Persisted trie from memory database nodes=23 size=6.70KiB time=83.787µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=-116.00B
Fatal: Failed to deploy contracts Failed to deploy MintableToken contract: insufficient funds for gas * price + value
In this page https://docs.tokamak.network/docs/ko/guides/getting-started/private-testnet-staking,
the source code style looks like python. I think bash highlight should be used.
ubuntu@ip-172-31-20-161:~/plasma-evm$ geth init
Command 'geth' not found, but can be installed with:
sudo snap install geth
manage-staking중 다음 명령어
manage-staking.deployManager
manage-staking.deployPowerTON
manage-staking.startPowerTON
--> 이 명령과 관련된 항목은 "프라이빗 테스트넷 시작 - 루트체인 설정 - 스테이킹 환경 설정" 항목 안쪽으로 삽입. "루트체인 실행" 다음 항으로 들어가면 맞을 것 같습니다.
이 세가지 항목은 만약 토카막 네트워크의 메인넷이 시작한다면 "이더리움 메인넷"에 이미 배포 및 설정이 되어 있는 항목이기 때문에, 테스트 과정에서는 루트체인에 기본적으로 설정되어 있는 것이 자연스러움.
manage-staking.setManagers
manage-staking.register
이 명령과 관련된 항목은 "자식체인설정 - 오퍼레이터 노드 설정 - 5.오퍼레이터 스테이킹 설정" 항목으로 이동. 기존의 "5.오퍼레이터 노드 실행"은 "6.오퍼레이터 노드 실행"으로 변경
이 과정은 오퍼레이터를 세팅하는 과정에서 필요한 부분이므로, 오퍼레이터 노드 설정에 들어가는 것이 자연스러움.
manage-staking.mintTON
staking.balances
staking.swapFromTON
staking.swapToTON
staking.stakeTON
staking.stakeWTON
staking.requestWithdrawal
staking.processWithdrawal
이 명령어와 관련된 내용은 기존에 있던 "TON 스테이킹 - 프라이빗 네트워크 테스트" 항목아래 기존 순서와 시나리오 그대로 위치. 단서로 "루트체인설정"과 "자식체인 설정 - 오퍼레이터 노드 설정"을 마치고 시작하도록 언급.
위와 같은 액션은 모든 설정이 마무리되고 스테이킹을 시뮬레이션 하는 부분이므로, TON스테이킹과 관련된 항목 아래로 이동해서 테스트 혹은 시뮬레이션이라고 명확히 밝힌 후 서술하는것이 내용 흐름상 자연스러움.
다만 이 부분은 온전히 시뮬레이션과 관련된 항목이며, 실제 토카막에 메인넷에 올라가서 스테이킹이 동작하고 있다면, stake/unstake와 관련된 항목만 추후에 분리하여 메인넷 기준으로 별도로 서술할 필요가 있음.
프라이빗 테스트넷 루트체인 설정 페이지에 인트로, 아웃트로 추가가 필요해 보입니다.
대부분의 "빠르게 시작하기"로 들어온 개발자들은 루트체인에 대한 개념이 익숙하지 않습니다. 따라서 들어가는 안내말을 통해서 루트체인의 개념을 간략하게 설명하고 관련 개념에 대한 링크를 달아주는게 좋을 것 같습니다.
아웃트로의 경우도 마찬가로 제일 처음 들어온 개발자가 루트체인 설정만 마치고 튜토리얼을 마무리 할 가능성이 있습니다. 아웃트로를 통해서 자식체인 설정하기로 이어지도록 유도하는게 바람직해보입니다.
이 문서의 과정은 프라이빗 블록체인을 루트체인(rootchain)으로 사용하는 레이어2 블록체인의 구축 과정을 담고있다. 루트체인(rootchain)이란 플라즈마 기반의 레이어2 블록체인을 사용하는 토카막 네트워크의 베이스체인(레이어1 체인)을 뜻한다. 자세한 개념은 플라즈마란 무엇인가 참조.
루트체인을 설정하는 과정은 이더리움 기반의 프라이빗 블록체인을 설정하는것과 실질적으로 같다. 다만 우리는 단순히 프라이빗 블록체인 하나를 만드는데 그치지 않고, 레이어2 토카막 플라즈마를 셋업을 위한 다양한 스마트 컨트랙트를 미리 배포해 두었다. 이어지는 자식체인 설정과정을 통해서 본격적으로 루트체인과 연결된 레이어2 토카막 블록체인을 구성해보자.
ubuntu@ip-172-31-21-209:~/go-ethereum$ bash run.rootchain.sh
run.rootchain.sh: line 15: make: command not found
"프라이빗 테스트넷 자식 체인 직접 설정"에 인트로와 아웃트로 내용 추가
루트체인 설정하기를 통해서 성공적으로 루트체인을 배포했다면, 이번에는 자식체인을 구동시켜보자. 자식체인이란 루트체인에 의존하는 토카막의 레이어2 블록체인을 뜻한다. 더불어 이 과정은 루트체인 설정하기를 동일한 머신에서 수행 했음을 가정하고 있다.
이제 만들어진 사용자 노드에 JSON-RPC 통신을 이용해 간단한 트랜잭션을 날려보자. 토카막 플라즈마의 경우 트랜잭션이 없다면 블록이 생기지 않는데, 이는 토카막 네트워크의 독특한 구조에서 기인한다. 또한 간단한 요청가능한 컨트랙트를 루트체인과 자식체인 모두에 배포하고 진입과 탈출 트랜잭션도 만들어보자. 이러한 과정은 통해 토카막 네트워크의 강력한 상호운용성을 이해하는데 도움을 줄 것이다.
가이드 - 프라이빗 테스트넷 시작하기 - 직접 설정하기
여기서 [직접 설정하기] 보다는 [자식체인 설정하기]가 더 어울릴 것 같습니다.
프라이빗 테스트넷 시작하기 하위항목은
[루트체인 설정]
[자식체인 설정]
[puppeth로 부모-자식체인 설정]
더욱 적절해보입니다.
ze libusb: libusb: unknown error [code -99]"
Repeat password:
password 입력이 나오지 않음, repeat password만 나옴
ubuntu@ip-172-31-21-209:~/plasma-evm$ ./build/bin/geth init
Fatal: Must supply path to genesis JSON file
ubuntu@ip-172-31-21-209:~/plasma-evm$ ./build/bin/geth init genesis.json
Fatal: Failed to connect root chain backend: dial unix: missing address
ubuntu@ip-172-31-21-209:~/plasma-evm$ geth init
Command 'geth' not found, but can be installed with:
sudo snap install geth
$ git clone github.com/Onther-Tech/go-ethereum
fatal: repository 'github.com/Onther-Tech/go-ethereum' does not exist
It should be
git clone https://github.com/Onther-Tech/go-ethereum.git
rootchain과 childchain이 동일한 인스턴스에서 실행되고 있다는 점을 명확히 명시
아래 명령어 추가 필요
$ git clone https://github.com/onther-tech/plasma-evm
$ cd plasma-evm
"편의성: 계정, 트랜잭션 수수료, 개발도구" 페이지에서 next 버튼 눌리지 않음
https://docs.tokamak.network/docs/learn/basic/transaction-fee
As issued powers will be burn after unstake TONs, we do not need additional option to join PowerTON for delegators.
미발생 시뇨리지가 팟으로 분배되는 수치들, 변수처리할 필요 있음.
ubuntu@ip-172-31-20-161:~/plasma-evm$ build/bin/geth init \
> --datadir ./chaindata \
> --rootchain.url ws://localhost:8546 \
> genesis.json
INFO [02-25|04:05:37.539] Root chain backend connected url=ws://localhost:8546
INFO [02-25|04:05:37.542] Stamina config is set mindeposit=500000000000000000 recoverepochlength=10080 withdrawaldelay=30240
INFO [02-25|04:05:37.542] Maximum peer count ETH=50 LES=0 total=50
INFO [02-25|04:05:37.542] Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"
ERROR[02-25|04:05:37.542] Failed to enumerate USB devices hub=ledger vendor=11415 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[02-25|04:05:37.543] Failed to enumerate USB devices hub=trezor vendor=21324 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[02-25|04:05:37.543] Failed to enumerate USB devices hub=trezor vendor=4617 failcount=1 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[02-25|04:05:37.543] Failed to enumerate USB devices hub=ledger vendor=11415 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[02-25|04:05:37.543] Failed to enumerate USB devices hub=trezor vendor=21324 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
ERROR[02-25|04:05:37.543] Failed to enumerate USB devices hub=trezor vendor=4617 failcount=2 err="failed to initialize libusb: libusb: unknown error [code -99]"
INFO [02-25|04:05:37.560] Set options for submitting a block mingaspirce=1000000000 maxgasprice=100000000000 resubmit=0s
INFO [02-25|04:05:37.560] Allocated cache and file handles database=/home/ubuntu/plasma-evm/chaindata/geth/chaindata cache=16.00MiB handles=16
Fatal: Failed to open database: resource temporarily unavailable
datadir need to be changed something
We had done with documentation in Korean and English successfully in Paris, but we still need second review for all documents to check trivial typo or any error.
ubuntu@ip-172-31-21-209:~$ git clone github.com/Onther-Tech/go-ethereum
fatal: repository 'github.com/Onther-Tech/go-ethereum' does not exist
ubuntu@ip-172-31-20-161:~/plasma-evm$ echo > "" > signer.pass
-bash: : No such file or directory
staking register명령어에 —abi —manager 플래그 추가 제안
staking deployPowerTON / staking startPowerTON / staking setManager 명령을 시행하지 않으면 staking register명령어가 동작하지 않음
build/bin/geth staking deployPowerTON 60s \ --datadir ./.pls.staking/manager \ --rootchain.url ws://127.0.0.1:8546 \ --dev.key b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291 \ --operator 0x71562b71999873DB5b286dF957af199Ec94617F7
위 명령어와
build/bin/geth staking startPowerTON \ --datadir ./.pls.staking/manager \ --rootchain.url ws://127.0.0.1:8546 \ --dev.key b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291 \ --operator 0x71562b71999873DB5b286dF957af199Ec94617F7
이 명령어와(확인 필요)
build/bin/geth staking setManagers manager.json \ --datadir ./.pls.staking/operator1
이 명령어가 없으면
build/bin/geth staking register \ --datadir ./.pls.staking/operator2 \ --rootchain.url ws://127.0.0.1:8546 \ --operator 0x57ab89f4eabdffce316809d790d5c93a49908510
이 명령어가 동작하지 않음
staking register 플래그에 —abi —stakeContract 플래그 추가 제안
— abi : stake와 관련된 컨트랙트 정보들에 관한 abi파일들을 참조할 수 있음
— stakeContract : stake와 관련된 컨트랙트 정보를 담은 .json파일을 참조할 수 있음
이더리움 메인넷에서 토카막 네트워크의 시뇨리지와 파워톤 등의 컨트랙트가 이미 배포되어 있고,
이때 오페레이터를 세팅하는 과정에서 기 배포된 시뇨리지 컨트랙트를 다시 배포해야만 register가능한 상황은 옳지 않아보임
오퍼레이터는 이미 기 배포된 시뇨리지, 파워톤 등의 컨트랙트를 이용해서 손쉽게 오퍼레이터를 세팅할 수 있어야함
Accounts changed at tokamak-network/go-ethereum@7a9a5ad for rootchain as testing.
Have to update OPERATOR, MANAGER and other accounts.
Update how to set commission rate for operator in docs/staking-mainnet
Refer to : tokamak-network/plasma-evm-contracts#19
ubuntu@ip-172-31-21-209:~/go-ethereum$ bash run.rootchain.sh
run.rootchain.sh: line 15: make: command not found
make를 별도로 설치
sudo apt-get install make
설치했으나 오류 발행
ubuntu@ip-172-31-21-209:~/go-ethereum$ bash run.rootchain.sh
build/env.sh go run build/ci.go install ./cmd/geth
#github.com/ethereum/go-ethereum/crypto/secp256k1
exec: "gcc": executable file not found in $PATH
Makefile:15: recipe for target 'geth' failed
make: *** [geth] Error 2
gcc가 설치되지 않은 것 같음, 다음 명령을 먹임
apt-get install build-essential
그래도 안됨
apt-get update && apt-get upgrage 하고 난 이후에 build-essentials를 설치한 후에야 동작함.
필요한 대안
It need to be added to "what is tokamak netowrk" page
staking register명령어에 —abi —manager 플래그 추가 제안
staking deployPowerTON / staking startPowerTON / staking setManager 명령어가 없으면 staking register명령어가 동작하지 않음
위 명령어와
이 명령어와(확인 필요)
build/bin/geth staking setManagers manager.json \ --datadir ./.pls.staking/operator1
이 명령어가 없으면
이 명령어가 동작하지 않음
staking register 플래그에 —abi —stakeContract 플래그 추가 제안
— abi : stake와 관련된 컨트랙트 정보들에 관한 abi파일들을 참조할 수 있음
— stakeContract : stake와 관련된 컨트랙트 정보를 담은 .json파일을 참조할 수 있음
이더리움 메인넷에서 토카막 네트워크의 시뇨리지와 파워톤 등의 컨트랙트가 이미 배포되어 있고,
이때 오페레이터를 세팅하는 과정에서 기 배포된 시뇨리지 컨트랙트를 다시 배포해야만 register가능한 상황은 옳지 않아보임
오퍼레이터는 이미 기 배포된 시뇨리지, 파워톤 등의 컨트랙트를 이용해서 손쉽게 오퍼레이터를 세팅할 수 있어야함
ubuntu@ip-172-31-21-209:~$ mv go /usr/local
mv: cannot move 'go' to '/usr/local/go': Permission denied
새로운 인스턴스에서 해당 명령을 주면 에러 발생
signer.pass does not work if passphrase is not empty.
\ should be added end of this line
All term should be "스테이킹",
except for
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.