# install solidity
https://docs.soliditylang.org/en/v0.8.11/installing-solidity.html
install solc
```bahs
docker run ethereum/solc:stable --help
You can also specify release build versions in the tag, for example, for the 0.5.4 release.
docker run ethereum/solc:0.5.4 --help
To use the Docker image to compile Solidity files on the host machine mount a local folder for input and output, and specify the contract to compile. For example.
docker run -v /local/path:/sources ethereum/solc:stable -o /sources/output --abi --bin /sources/Contract.sol
```
# create smart contract
```bahs
root@HOME-X213212:~/golang/nodejs/sources# tree
.
├── Store.sol
└── output
├── Store.abi
├── Store.bin
└── Store.go
1 directory, 4 files
```
我們實際要先來撰寫合約
```solidity=
pragma solidity ^0.8.3;
contract Store {
event ItemSet(bytes32 key, bytes32 value);
string public version;
mapping (bytes32 => bytes32) public items;
constructor(string memory _version) public {
version = _version;
}
function setItem(bytes32 key, bytes32 value) external {
items[key] = value;
emit ItemSet(key, value);
}
}
```
# compiler contract
```bash=
docker run -v ~/golang/nodejs/sources:/sources ethereum/solc:stable -o /sources/output --abi --bin /sources/Store.sol
abigen --bin=Store.bin --abi=Store.abi --pkg=store --out=Store.go
```
引入file 怪怪的 我直接從這裡複製到 main.go 檔案底下
![](https://i.imgur.com/Ow2HP7t.png)
![](https://i.imgur.com/K1Pc6Uf.png)
就目前理解 eth 在這些區塊鏈中實現一個虛擬機,那麼礦工中的挖礦可能可以類似虛擬機的指令執行,而達成指令的操作實現一個小型的程式。