diff --git a/README.md b/README.md index aa279d80f4..caaf530c38 100644 --- a/README.md +++ b/README.md @@ -13,19 +13,31 @@ ---- Welcome to the official Go implementation of IoTeX protocol! IoTeX is building the next generation of the decentralized -network for IoT powered by scalability- and privacy-centric blockchains. Please refer to -IoTeX [whitepaper](https://iotex.io/academics) for details. +network for IoT powered by scalability- and privacy-centric blockchains. Please refer to IoTeX +[whitepaper](https://iotex.io/academics) for details. -Currently, This repo is of alpha-quality with limited features supported and it is subjected to rapid change. Please -contact us if you intend to run it in production. -## Minimum requirements +## Contact + +- Mailing list: [iotex-dev](iotex-dev@iotex.io) +- IRC: [gitter](https://gitter.im/iotex-dev-community/Lobby) + +### Minimum requirements | Components | Version | Description | |----------|-------------|-------------| -|[Golang](https://golang.org) | >= 1.11.5 | The Go Programming Language | +| [Golang](https://golang.org) | ≥ 1.11.5 | Go programming language | +| [Dep](https://golang.github.io/dep/) | ≥ 0.5.0 | Dependency management tool, required only when you update dependencies | +| [Protoc](https://developers.google.com/protocol-buffers/) | ≥ 3.6.0 | Protocol buffers, required only when you rebuild protobuf messages | + +### Get iotex-core + +The easiest way to get iotex-core is to use one of release packages which are available for OSX, Linux on the +[release page](https://github.com/iotexproject/iotex-core/releases). Iotex-core is also distributed via docker image +on [docker hub](https://hub.docker.com/r/iotex/iotex-core). + -## Setup Dev Environment +### Build iotex-core from code Download the code by ``` @@ -37,200 +49,61 @@ cd iotex-core Build the project by -```make``` - +``` +make +``` -If you need to update the dependency, install Go dependency management tool from -[golang dep](https://github.com/golang/dep). Then, run +If the dependency needs to be updated, run -```dep ensure``` +``` +dep ensure [--vendor-only] +``` -Note: If your Dev Environment is in Ubuntu, you need to export the following Path: -```LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GOPATH/src/github.com/iotexproject/iotex-core/crypto/lib:$GOPATH/src/github.com/iotexproject/iotex-core/crypto/lib/blslib``` +Run unit tests only by -### Run Unit Tests -```make test``` - -### Reboot -```make reboot``` reboots blockchain from fresh database. - -You will see log message output like: -``` -2018-08-28T09:54:02-07:00 |INFO| commit a block height=0 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:02-07:00 |INFO| Starting dispatcher iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:02-07:00 |INFO| Starting IotxConsensus scheme iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate scheme=STANDALONE -2018-08-28T09:54:02-07:00 |INFO| start RPC server on 127.0.0.1:4689 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:02-07:00 |INFO| Starting Explorer JSON-RPC server on [::]:14004 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:03-07:00 |INFO| No peer exist to sync with. iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:03-07:00 |INFO| created a new block at="2018-08-28 09:54:03.210120086 -0700 PDT m=+1.047466065" iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:03-07:00 |INFO| created a new block height=1 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y length=1 networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:03-07:00 |INFO| commit a block height=1 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:04-07:00 |INFO| No peer exist to sync with. iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:04-07:00 |INFO| created a new block at="2018-08-28 09:54:04.213299491 -0700 PDT m=+2.050689454" iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:04-07:00 |INFO| created a new block height=2 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y length=1 networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T09:54:04-07:00 |INFO| commit a block height=2 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -``` - -### Run -```make run``` restarts blockchain with existing database. - -You will see log message output like: -``` -2018-08-28T10:03:40-07:00 |INFO| Restarting blockchain blockchain height=3 factory height=3 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:40-07:00 |INFO| Starting dispatcher iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:40-07:00 |INFO| Starting IotxConsensus scheme iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate scheme=STANDALONE -2018-08-28T10:03:40-07:00 |INFO| start RPC server on 127.0.0.1:4689 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:40-07:00 |INFO| Starting Explorer JSON-RPC server on [::]:14004 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:41-07:00 |INFO| created a new block at="2018-08-28 10:03:41.17804365 -0700 PDT m=+1.034361469" iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:41-07:00 |INFO| No peer exist to sync with. iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:41-07:00 |INFO| created a new block height=4 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y length=1 networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:41-07:00 |INFO| commit a block height=4 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:42-07:00 |INFO| No peer exist to sync with. iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:42-07:00 |INFO| created a new block at="2018-08-28 10:03:42.175542402 -0700 PDT m=+2.031857345" iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:42-07:00 |INFO| created a new block height=5 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y length=1 networkAddress=127.0.0.1:4689 nodeType=delegate -2018-08-28T10:03:42-07:00 |INFO| commit a block height=5 iotexAddr=io1qyqsyqcy8uhx9jtdc2xp5wx7nxyq3xf4c3jmxknzkuej8y networkAddress=127.0.0.1:4689 nodeType=delegate -``` - -### Minicluster -```make minicluster``` runs a cluster of 4 delegate nodes with RollDPoS consensus scheme while actions are automatically injected to one of the nodes. - -You will see log message output like: -``` -2018-10-18T14:23:18-07:00 |INFO| commit a block height=0 -2018-10-18T14:23:18-07:00 |INFO| Starting IotxConsensus scheme scheme=ROLLDPOS -2018-10-18T14:23:18-07:00 |INFO| commit a block height=0 -2018-10-18T14:23:18-07:00 |INFO| Starting IotxConsensus scheme scheme=ROLLDPOS -2018-10-18T14:23:18-07:00 |INFO| commit a block height=0 -2018-10-18T14:23:18-07:00 |INFO| Starting IotxConsensus scheme scheme=ROLLDPOS -2018-10-18T14:23:18-07:00 |INFO| commit a block height=0 -2018-10-18T14:23:18-07:00 |INFO| Starting IotxConsensus scheme scheme=ROLLDPOS -2018-10-18T14:23:18-07:00 |INFO| Starting Explorer JSON-RPC server on [::]:14004 -2018-10-18T14:23:18-07:00 |INFO| Starting dispatcher -2018-10-18T14:23:18-07:00 |INFO| Starting Explorer JSON-RPC server on [::]:14006 -2018-10-18T14:23:18-07:00 |INFO| Starting dispatcher -2018-10-18T14:23:18-07:00 |INFO| Starting Explorer JSON-RPC server on [::]:14005 -2018-10-18T14:23:18-07:00 |INFO| Starting dispatcher -2018-10-18T14:23:18-07:00 |INFO| start RPC server on 127.0.0.1:4689 -2018-10-18T14:23:18-07:00 |INFO| start RPC server on 127.0.0.1:4691 -2018-10-18T14:23:18-07:00 |INFO| start RPC server on 127.0.0.1:4690 -2018-10-18T14:23:18-07:00 |INFO| Starting Explorer JSON-RPC server on [::]:14007 -2018-10-18T14:23:18-07:00 |INFO| Starting dispatcher -2018-10-18T14:23:18-07:00 |INFO| start RPC server on 127.0.0.1:4692 -``` - -### Deploy w/ Docker Image - -```make docker``` - -## Dev Tools -### Use actioninjector to inject actions -Open one terminal window and run the command below to compile and start the test chain server. (This is optional, just -in case you don't have a node running). +``` +make test +``` -`make reboot` +Build the docker image by -Open a new terminal window and start running actioninjector. +``` +make docker +``` -`./bin/actioninjector` +### Run iotex-core -You can use command line flags to customize the injector. +Start (or resume) a standalone server to operate on an blockchain by ``` --injector-config-path=path_of_config_file_of_genesis_transfer_addresses --chain=id_of_target_chain --addr=target_address_for_jrpc_connection --transfer-num=number_of_transfers --transfer-gas-limit=transfer_gas_limit --transfer-gas-price=transfer_gas_price --transfer-payload=transfer_payload --vote-num=number_of_votes --vote-gas-limit=vote_gas_limit --vote-gas-price=vote_gas_price --execution-num=number_of_executions --contract=smart_contract_address --execution-amount=execution_amount --execution-gas-limit=execution_gas_limit --execution-gas-price=execution_gas_price --execution-data=execution_data --interval=sleeping_interval_in_seconds --retry-num=maximum_number_of_rpc_retries --retry-interval=sleeping_interval_between_two_consecutive_rpc_retries_in_seconds --aps=actions_to_be_injected_per_second_APS_MODE_ONLY --duration=duration_of_injector_running_in_seconds_APS_MODE_ONLY --reset-interval=time_interval_to_reset_nonce_counter_in_seconds -``` - -Default flag values: -* injector-config-path="./tools/actioninjector.v2/gentsfaddrs.yaml" -* chain=1 -* addr="127.0.0.1:14004" -* transfer-num=50 -* transfer-gas-limit=1000000 -* transfer-gas-price=10 -* transfer-payload="" -* vote-num=50 -* vote-gas-limit=1000000 -* vote-gas-price=10 -* execution-num=50 -* contract="io1pmjhyksxmz2xpxn2qmz4gx9qq2kn2gdr8un4xq" -* execution-amount=0 -* execution-gas-limit=1200000 -* execution-gas-price=10 -* execution-data="2885ad2c" -* interval=5 -* retry-num=5 -* retry-interval=1 -* aps=0 -* duration=60 -* reset-interval=10 - -Note: APS is a running mode option which is disabled by default. When aps > 0, APS mode is enabled and the injector alternates to inject transfers and votes within the time frame specified by duration. - -### Use addrgen to generate addresses -Open a terminal window and run the command below to start running addrgen. +make run +``` -`make build; ./bin/addrgen` - -You can use command line flag to customize the address generator. - -`-number=numer_of_addresses_to_be_generated` - -Default flag value: -* number=10 - -### Use iotc to query the blockchain -Open a terminal window and run the command below to compile and start the test chain server with the configuration specified in "config_local_delegate.yaml" (This is optional, just in case you don't have a node running). - -`make; make run` - -Open a new terminal window and run iotc with the following command. +Restart the server from a clean state by -`./bin/iotc [commands] [flags]` +``` +make reboot +``` -The following is the complete current usage of iotc. More commands will be added in the future. +Note that if your enviroment is in Linux, you need to add the share libraries into `$LD_LIBRARY_PATH` by ``` -Usage: - iotc [command] [flags] +LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GOPATH/src/github.com/iotexproject/iotex-core/crypto/lib:$GOPATH/src/github.com/iotexproject/iotex-core/crypto/lib/blslib +``` -Available Commands: - balance Returns the current balance of given address - details Returns the details of given account - height Returns the current height of the blockchain - help Help about any command - self Returns this node's address - transfers Returns the transfers associated with a given address +## Contact -Flags: - -h, --help help for iotc +- Mailing list: [iotex-dev](iotex-dev@iotex.io) +- IRC: [gitter](https://gitter.im/iotex-dev-community/Lobby) +- Bugs: [issues](https://github.com/iotexproject/iotex-core/issues) -Use "iotc [command] --help" for more information about a command. -``` ## Contribution -We are glad to have contributors out of the core team; contributions, including (but not limited to) style/bug fixes, implementation of features, proposals of schemes/algorithms, and thorough documentation, are -welcomed. Please refer to our [contribution guideline](https://github.com/iotexproject/iotex-core/blob/master/CONTRIBUTING.md) for more information. +We are glad to have contributors out of the core team; contributions, including (but not limited to) style/bug fixes, +implementation of features, proposals of schemes/algorithms, and thorough documentation, are welcomed. Please refer to +our [contribution guideline](https://github.com/iotexproject/iotex-core/blob/master/CONTRIBUTING.md) for more +information. Development guide documentation is [here](https://github.com/iotexproject/iotex-core/wiki/Developers%27-Guide). ## License This project is licensed under the [Apache License 2.0](https://github.com/iotexproject/iotex-core/blob/master/LICENSE). diff --git a/logo/LICENSE b/logo/LICENSE deleted file mode 100644 index f49a4e16e6..0000000000 --- a/logo/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file