Python biên dịch Solidity

Chúng ta sẽ xem qua một hướng dẫn được tạo bởi Patrick Collins [https. //github. com/PatrickAlphaC/web3_py_simple_storage]

  • Cài đặt nodejs
  • Cài đặt ganache bằng sợi hoặc npm [để mô phỏng máy ảo chuỗi khối cục bộ]
Thiết lập và Triển khai Hợp đồng Thông minh

Tạo một thư mục dự án mới và sao chép mã solidity mẫu vào một tệp mới

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
7

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}

Tạo một tệp

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
8. Chúng tôi sẽ hướng dẫn từng bước để hiểu từng phần của mã

1. Nhập các mô-đun cần thiết này

from solcx import compile_standard
from solcx import install_solc
import json
import os
from web3 import Web3

2. Chúng tôi sử dụng

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
9 để biên dịch mã hợp đồng thông minh. Đây là trình bao bọc python cho trình biên dịch Solidity

Đầu tiên chúng ta mở và đọc nội dung của mã hợp đồng thông minh

Sau đó cài đặt phiên bản trình biên dịch solidity. Nó sẽ tải xuống trình biên dịch từ liên kết tải xuống Github của dự án

Định cấu hình các tiêu chuẩn biên dịch

  • ngôn ngữ
  • nguồn
  • cài đặt
  • phiên bản trình biên dịch solidity

Chúng ta có thể kết xuất mã đã biên dịch để xem cấu trúc của mã

with open["./SimpleStorage.sol", "r"] as file:
    simple_storage_file = file.read[]

print["Installing solc..."]
install_solc['0.6.0']

# Configure compile standards
compiled_sol = compile_standard[
    {
        "language": "Solidity",
        "sources": {"SimpleStorage.sol": {"content": simple_storage_file}},
        "settings": {
            "outputSelection": {
                "*": {
                    "*": ["abi", "metadata", "evm.bytecode", "evm.bytecode.sourceMap"]
                }
            }
        }
    },
    solc_version="0.6.0"
]

# Dump the compiled code to see the structure of the code
with open["compiled_code.json", "w"] as file:
    json.dump[compiled_sol, file]

3. Lấy mã byte và abi từ mã đã biên dịch. Làm cách nào để biết cấu trúc của JSON?

bytecode = compiled_sol["contracts"]["SimpleStorage.sol"]["SimpleStorage"]["evm"]["bytecode"]["object"]

abi = compiled_sol["contracts"]["SimpleStorage.sol"]["SimpleStorage"]["abi"]

4. Bây giờ hãy khởi động máy chủ ganache và chúng ta có thể thấy các tài khoản giả và khóa riêng được tạo. Ghi lại nơi máy chủ đang lắng nghe

________số 8

5. Thiết lập kết nối với máy chủ ganache


w3 = Web3[Web3.HTTPProvider["//127.0.0.1:8545"]]
chain_id = 1337
my_addr = "0xB136383615B477B1B816f4227A509ea8F0C0c9DD"
private_key = os.getenv["PRIVATE_KEY"]

KHÔNG MÃ HÓA KHÓA RIÊNG TƯ CỦA BẠN TRONG REPOS MÃ CỦA BẠN

Nếu chúng tôi muốn kết nối với môi trường Testnet, chúng tôi có thể sử dụng cổng ETH như Infura hoặc Alchemy

6a. Tạo hợp đồng với nhà cung cấp bằng abi và bytecode

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
0

6b. Nhận số lượng giao dịch mới nhất và sử dụng nó như nonce

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
1

6c. Gửi giao dịch triển khai hợp đồng bằng chainId, gasPrice, từ [ which addr ] và nonce

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
2

6d. Ký giao dịch bằng khóa riêng

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
0

7. Triển khai hợp đồng

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
1

Sử dụng Hợp đồng thông minh

Vì Hợp đồng thông minh được triển khai, chúng tôi có thể cung cấp địa chỉ hợp đồng và abi để tạo hợp đồng thông minh [“simple_storage”]

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
2

Chúng ta có thể thực hiện lệnh gọi hàm mà không thay đổi bất kỳ trạng thái nào trong hợp đồng thông minh. Trong ví dụ này, chúng tôi đang cố truy xuất giá trị được lưu trữ trong hợp đồng thông minh

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
3

Bây giờ, chúng ta gọi hàm

from solcx import compile_standard
from solcx import install_solc
import json
import os
from web3 import Web3
1 trong hợp đồng thông minh để cập nhật biến
from solcx import compile_standard
from solcx import install_solc
import json
import os
from web3 import Web3
2

// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0  uint256] public nameToFavoriteNumber;

    function store[uint256 _favoriteNumber] public {
        favoriteNumber = _favoriteNumber;
    }

    function retrieve[] public view returns [uint256] {
        return favoriteNumber;
    }

    function addPerson[string memory _name, uint256 _favoriteNumber] public {
        people.push[People[_favoriteNumber, _name]];
        nameToFavoriteNumber[_name] = _favoriteNumber;
    }
}
4

Chúng tôi sẽ ký giao dịch này bằng khóa riêng, gửi giao dịch đến máy chủ Ganache và sau đó chờ nhận giao dịch

Lưu ý nếu bạn thực hiện giao dịch trong VM blockchain cục bộ, tốc độ giao dịch sẽ rất nhanh. Nhưng trong Testnet hoặc Mainnet thực tế, giao dịch có thể sẽ chậm hơn

Bạn có thể sử dụng Solidity với Python không?

Solidity được thiết kế dựa trên các ngôn ngữ lập trình hiện có như C++, Python và JavaScript , do đó, Solidity sử dụng các cấu trúc ngôn ngữ tương tự có trong các ngôn ngữ này, rất có thể giúp nhà phát triển dễ dàng tiếp nhận. Nếu bạn là nhà phát triển JavaScript hoặc C++, điều này sẽ quen thuộc với bạn.

Python có tốt cho hợp đồng thông minh không?

Javascript có Web3. thư viện js cho Web 3. nhiệm vụ liên quan đến 0. Hơn nữa, Python cũng là ngôn ngữ để triển khai hợp đồng thông minh n. Solidity hoặc Vyper đều cung cấp một gói khá.

Python có thể được sử dụng cho Dapps không?

Trong bài viết này, tôi sẽ nói về cách bạn có thể viết một dapp Web 3 bằng Python. Đối với Python, bạn sẽ sử dụng web3. py, cho phép bạn tương tác với chuỗi khối Ethereum bằng Python . web3. py được lấy cảm hứng từ web3. js và do đó bạn có thể tìm thấy nhiều chức năng tương tự như những chức năng bạn thấy trong web3.

Solidity giống với Python như thế nào?

Solidity là ngôn ngữ có dấu ngoặc nhọn, có nghĩa là nó sử dụng dấu ngoặc nhọn để bao quanh các khối, trái ngược với các ngôn ngữ như Python , trong đó các khối . Nhưng tài liệu của Solidity nói rằng nó không chỉ bị ảnh hưởng bởi C++ và JavaScript mà còn bởi Python.

Chủ Đề