-
Notifications
You must be signed in to change notification settings - Fork 0
/
deploy_guild_smart_contract.py
93 lines (71 loc) · 2.65 KB
/
deploy_guild_smart_contract.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from multiversx_sdk import Address, TokenComputer, TransactionComputer
from multiversx_sdk import Transaction
from pathlib import Path
from multiversx_sdk import SmartContractTransactionsFactory
from multiversx_sdk import ProxyNetworkProvider
from multiversx_sdk import UserSigner
import yaml
# Read config
with open("config_file.yaml", "r") as file:
config = yaml.safe_load(file)
# Signing wallet bech32 address
test_address = Address.from_bech32(config["signingWalletAddress"])
# Network provider
provider = ProxyNetworkProvider(config["defaultPROXY"])
# Get account for the signing wallet
test_account = provider.get_account(test_address)
# Get network configuration
network_config = provider.get_network_config()
# Load the signer from the pem file for the signing wallet
signer = UserSigner.from_pem_file(
Path(config["signingWalletPemPath"]),
)
# Create a smart contract transaction factory
sc_factory = SmartContractTransactionsFactory(network_config)
# Load the bytecode of the smart contract
bytecode = Path("/home/multiversx/Documents/guilds_py/wasm/guild-sc.wasm").read_bytes()
deploy_transaction = sc_factory.create_transaction_for_deploy(
sender=test_address,
bytecode=bytecode,
arguments=[
config["farmingToken"], # farming_token_id
1000000000000, # division_safety_constant
Address.from_bech32(config["guildConfigScAddressModel"]), # config_sc_address
test_address, # guild_master_address
test_address, # mut admins
],
gas_limit=500000000,
is_upgradeable=True,
is_readable=True,
is_payable=True,
is_payable_by_sc=True,
)
deploy_transaction.nonce = test_account.nonce
transaction_computer = TransactionComputer()
deploy_transaction.signature = signer.sign(
transaction_computer.compute_bytes_for_signing(deploy_transaction)
)
result = provider.send_transaction(deploy_transaction)
print("Guild deploy transaction hash:", result)
# Wait for the transaction to be included in a block
import time
time.sleep(5)
retry_count = 5
try:
while (
retry_count > 0 and not provider.get_transaction_status(result).is_successful()
):
retry_count -= 1
time.sleep(5)
if retry_count == 0:
raise Exception("Transaction failed")
print("Transaction successful")
tx_details = provider.get_transaction(result)
guild_contract_address = tx_details.logs.events[0].address.to_bech32()
print("Guild contract address:", guild_contract_address)
config["guildScAddressModel"] = guild_contract_address
with open("config_file.yaml", "w") as file:
yaml.dump(config, file)
except Exception as e:
print(e)
print("Transaction failed")