mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #2895 from ethereum/docs-creation
Overhaul contract creation section in the documentation
This commit is contained in:
		
						commit
						1eb49fb144
					
				| @ -16,51 +16,23 @@ inaccessible. | ||||
| Creating Contracts | ||||
| ****************** | ||||
| 
 | ||||
| Contracts can be created "from outside" or from Solidity contracts. | ||||
| Contracts can be created "from outside" via Ethereum transactions or from within Solidity contracts. | ||||
| 
 | ||||
| IDEs, such as `Remix <https://remix.ethereum.org/>`_, make the creation process seamless using UI elements. | ||||
| 
 | ||||
| Creating contracts programatically on Ethereum is best done via using the JavaScript API `web3.js <https://github.com/etherem/web3.js>`_. | ||||
| As of today it has a method called `web3.eth.Contract <https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#new-contract>`_ | ||||
| to facilitate contract creation. | ||||
| 
 | ||||
| When a contract is created, its constructor (a function with the same | ||||
| name as the contract) is executed once. | ||||
| 
 | ||||
| A constructor is optional. Only one constructor is allowed, and this means | ||||
| overloading is not supported. | ||||
| 
 | ||||
| From ``web3.js``, i.e. the JavaScript | ||||
| API, this is done as follows:: | ||||
| 
 | ||||
|     // Need to specify some source including contract name for the data param below | ||||
|     var source = "contract CONTRACT_NAME { function CONTRACT_NAME(uint a, uint b) {} }"; | ||||
| 
 | ||||
|     // The json abi array generated by the compiler | ||||
|     var abiArray = [ | ||||
|         { | ||||
|             "inputs":[ | ||||
|                 {"name":"x","type":"uint256"}, | ||||
|                 {"name":"y","type":"uint256"} | ||||
|             ], | ||||
|             "type":"constructor" | ||||
|         }, | ||||
|         { | ||||
|             "constant":true, | ||||
|             "inputs":[], | ||||
|             "name":"x", | ||||
|             "outputs":[{"name":"","type":"bytes32"}], | ||||
|             "type":"function" | ||||
|         } | ||||
|     ]; | ||||
| 
 | ||||
|     var MyContract_ = web3.eth.contract(source); | ||||
|     MyContract = web3.eth.contract(MyContract_.CONTRACT_NAME.info.abiDefinition); | ||||
|     // deploy new contract | ||||
|     var contractInstance = MyContract.new( | ||||
|         10, | ||||
|         11, | ||||
|         {from: myAccount, gas: 1000000} | ||||
|     ); | ||||
| 
 | ||||
| .. index:: constructor;arguments | ||||
| 
 | ||||
| Internally, constructor arguments are passed after the code of | ||||
| the contract itself, but you do not have to care about this | ||||
| if you use ``web3.js``. | ||||
| Internally, constructor arguments are passed :ref:`ABI encoded <ABI>` after the code of | ||||
| the contract itself, but you do not have to care about this if you use ``web3.js``. | ||||
| 
 | ||||
| If a contract wants to create another contract, the source code | ||||
| (and the binary) of the created contract has to be known to the creator. | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user