Creating and Deploying a Contract¶
There are 3 type of environments Remix can be plugged to:
Javascript VM, Injected provider, or Web3 provider. (for details see Running transactions)
Both Web3 provider and Injected provider require the use of an
external tool.
The external tool for Web3 provider is an Ethereum node and for
Injected provider Metamask.
The JavaScript VM mode is convenient because each execution runs in
your browser and you don’t need any other software or Ethereum node to run it.
So, it is the easiest test environment - no setup required!
But keep in mind that reloading the browser when you are in the Javascript VM will restart Remix in an empty state.
For performance purposes ( which is to say - for testing in an environment that is closest to the mainnet), it might also be better to use an external node.
Selecting the VM mode¶
Make sure the VM mode is selected. All accounts displayed in Accounts
should have 100 ether.
Sample contract¶
{.sourceCode .none}
pragma solidity ^0.5.1;
contract testContract {
uint value;
constructor (uint _p) public {
value = _p;
}
function setP(uint _n) payable public {
value = _n;
}
function setNP(uint _n) public {
value = _n;
}
function get () view public returns (uint) {
return value;
}
}
This contract is very basic. The goal is to quickly start to create and to interact with a sample contract.
Deploying an instance¶
The Compile tab displays information related to the current contract
(note that there can be more than one) (see ../compile_tab).
Moving on, in the Run tab select, JavaScript VM to specify that you
are going to deploy an instance of the contract in the JavaScript VM
state.

The constructor of Ballot.sol needs a parameter (of type uint8).
Give any value and click on Deploy.
The transaction which deploys the instance of Ballot is created.
In a “normal” blockchain, it can take several seconds to execute. This
is the time for the transaction to be mined. However, because we are
using the JavaScript VM, our execution is immediate.
The terminal will inform you about the transaction. You can see details there and start debugging.
The newly created instance is displayed in the run tab.

Interacting with an instance¶
This new instance contains 3 actions which corresponds to the 3
functions (setP, setPN, get). Clicking on SetP or SetPN will
create a new transaction.
Note that SetP is payable (red button) : it is possible to send
value (Ether) to the contract.
SetPN is not payable (orange button - depending on the theme) : it is not possible to send
value (Ether) to the contract.
Clicking on get will not execute a transaction (usually its a blue button - depending on the theme). It doesn’t execute a transaction because a get does not modify the state (variable
value) of this instance.
As get is view you can see the return value just below the
action.
