Skip to content

Commit e733927

Browse files
author
abel
committed
(feat) Added logic in Composer to create the Tokenfactory related messages to admin tokens. Added new example scripts for all the messages.
1 parent 4f14a69 commit e733927

File tree

8 files changed

+448
-1
lines changed

8 files changed

+448
-1
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import asyncio
2+
3+
from pyinjective.composer import Composer as ProtoMsgComposer
4+
from pyinjective.core.broadcaster import MsgBroadcasterWithPk
5+
from pyinjective.core.network import Network
6+
from pyinjective.wallet import PrivateKey
7+
8+
9+
async def main() -> None:
10+
# select network: local, testnet, mainnet
11+
network = Network.testnet()
12+
composer = ProtoMsgComposer(network=network.string())
13+
private_key_in_hexa = "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3"
14+
15+
message_broadcaster = MsgBroadcasterWithPk.new_using_simulation(
16+
network=network,
17+
private_key=private_key_in_hexa,
18+
)
19+
20+
priv_key = PrivateKey.from_hex(private_key_in_hexa)
21+
pub_key = priv_key.to_public_key()
22+
address = pub_key.to_address()
23+
24+
message = composer.msg_create_denom(
25+
sender=address.to_acc_bech32(), subdenom="inj_test", name="Injective Test Token", symbol="INJTEST"
26+
)
27+
28+
# broadcast the transaction
29+
result = await message_broadcaster.broadcast([message])
30+
print("---Transaction Response---")
31+
print(result)
32+
33+
34+
if __name__ == "__main__":
35+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import asyncio
2+
3+
from pyinjective.composer import Composer as ProtoMsgComposer
4+
from pyinjective.core.broadcaster import MsgBroadcasterWithPk
5+
from pyinjective.core.network import Network
6+
from pyinjective.wallet import PrivateKey
7+
8+
9+
async def main() -> None:
10+
# select network: local, testnet, mainnet
11+
network = Network.testnet()
12+
composer = ProtoMsgComposer(network=network.string())
13+
private_key_in_hexa = "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3"
14+
15+
message_broadcaster = MsgBroadcasterWithPk.new_using_simulation(
16+
network=network,
17+
private_key=private_key_in_hexa,
18+
)
19+
20+
priv_key = PrivateKey.from_hex(private_key_in_hexa)
21+
pub_key = priv_key.to_public_key()
22+
address = pub_key.to_address()
23+
24+
amount = composer.Coin(amount=1_000_000_000, denom="factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test")
25+
26+
message = composer.msg_mint(
27+
sender=address.to_acc_bech32(),
28+
amount=amount,
29+
)
30+
31+
# broadcast the transaction
32+
result = await message_broadcaster.broadcast([message])
33+
print("---Transaction Response---")
34+
print(result)
35+
36+
37+
if __name__ == "__main__":
38+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import asyncio
2+
3+
from pyinjective.composer import Composer as ProtoMsgComposer
4+
from pyinjective.core.broadcaster import MsgBroadcasterWithPk
5+
from pyinjective.core.network import Network
6+
from pyinjective.wallet import PrivateKey
7+
8+
9+
async def main() -> None:
10+
# select network: local, testnet, mainnet
11+
network = Network.testnet()
12+
composer = ProtoMsgComposer(network=network.string())
13+
private_key_in_hexa = "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3"
14+
15+
message_broadcaster = MsgBroadcasterWithPk.new_using_simulation(
16+
network=network,
17+
private_key=private_key_in_hexa,
18+
)
19+
20+
priv_key = PrivateKey.from_hex(private_key_in_hexa)
21+
pub_key = priv_key.to_public_key()
22+
address = pub_key.to_address()
23+
24+
amount = composer.Coin(amount=100, denom="factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test")
25+
26+
message = composer.msg_burn(
27+
sender=address.to_acc_bech32(),
28+
amount=amount,
29+
)
30+
31+
# broadcast the transaction
32+
result = await message_broadcaster.broadcast([message])
33+
print("---Transaction Response---")
34+
print(result)
35+
36+
37+
if __name__ == "__main__":
38+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import asyncio
2+
3+
from pyinjective.composer import Composer as ProtoMsgComposer
4+
from pyinjective.core.broadcaster import MsgBroadcasterWithPk
5+
from pyinjective.core.network import Network
6+
from pyinjective.wallet import PrivateKey
7+
8+
9+
async def main() -> None:
10+
# select network: local, testnet, mainnet
11+
network = Network.testnet()
12+
composer = ProtoMsgComposer(network=network.string())
13+
private_key_in_hexa = "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3"
14+
15+
message_broadcaster = MsgBroadcasterWithPk.new_without_simulation(
16+
network=network,
17+
private_key=private_key_in_hexa,
18+
)
19+
20+
priv_key = PrivateKey.from_hex(private_key_in_hexa)
21+
pub_key = priv_key.to_public_key()
22+
address = pub_key.to_address()
23+
24+
sender = address.to_acc_bech32()
25+
description = "Injective Test Token"
26+
subdenom = "inj_test"
27+
denom = "factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test"
28+
token_decimals = 6
29+
name = "Injective Test"
30+
symbol = "INJTEST"
31+
uri = "http://injective-test.com/icon.jpg"
32+
uri_hash = ""
33+
34+
message = composer.msg_set_denom_metadata(
35+
sender=sender,
36+
description=description,
37+
denom=denom,
38+
subdenom=subdenom,
39+
token_decimals=token_decimals,
40+
name=name,
41+
symbol=symbol,
42+
uri=uri,
43+
uri_hash=uri_hash,
44+
)
45+
46+
# broadcast the transaction
47+
result = await message_broadcaster.broadcast([message])
48+
print("---Transaction Response---")
49+
print(result)
50+
51+
52+
if __name__ == "__main__":
53+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import asyncio
2+
3+
from pyinjective.composer import Composer as ProtoMsgComposer
4+
from pyinjective.core.broadcaster import MsgBroadcasterWithPk
5+
from pyinjective.core.network import Network
6+
from pyinjective.wallet import PrivateKey
7+
8+
9+
async def main() -> None:
10+
# select network: local, testnet, mainnet
11+
network = Network.testnet()
12+
composer = ProtoMsgComposer(network=network.string())
13+
private_key_in_hexa = "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3"
14+
15+
message_broadcaster = MsgBroadcasterWithPk.new_using_simulation(
16+
network=network,
17+
private_key=private_key_in_hexa,
18+
)
19+
20+
priv_key = PrivateKey.from_hex(private_key_in_hexa)
21+
pub_key = priv_key.to_public_key()
22+
address = pub_key.to_address()
23+
24+
message = composer.msg_update_params(
25+
authority=address.to_acc_bech32(),
26+
denom="factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test",
27+
amount=1000,
28+
)
29+
30+
# broadcast the transaction
31+
result = await message_broadcaster.broadcast([message])
32+
print("---Transaction Response---")
33+
print(result)
34+
35+
36+
if __name__ == "__main__":
37+
asyncio.get_event_loop().run_until_complete(main())
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import asyncio
2+
3+
from pyinjective.composer import Composer as ProtoMsgComposer
4+
from pyinjective.core.broadcaster import MsgBroadcasterWithPk
5+
from pyinjective.core.network import Network
6+
from pyinjective.wallet import PrivateKey
7+
8+
9+
async def main() -> None:
10+
# select network: local, testnet, mainnet
11+
network = Network.testnet()
12+
composer = ProtoMsgComposer(network=network.string())
13+
private_key_in_hexa = "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3"
14+
15+
message_broadcaster = MsgBroadcasterWithPk.new_without_simulation(
16+
network=network,
17+
private_key=private_key_in_hexa,
18+
)
19+
20+
priv_key = PrivateKey.from_hex(private_key_in_hexa)
21+
pub_key = priv_key.to_public_key()
22+
address = pub_key.to_address()
23+
24+
message = composer.msg_change_admin(
25+
sender=address.to_acc_bech32(),
26+
denom="factory/inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r/inj_test",
27+
new_admin="inj1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqe2hm49", # This is the zero address to remove admin permissions
28+
)
29+
30+
# broadcast the transaction
31+
result = await message_broadcaster.broadcast([message])
32+
print("---Transaction Response---")
33+
print(result)
34+
35+
36+
if __name__ == "__main__":
37+
asyncio.get_event_loop().run_until_complete(main())

pyinjective/composer.py

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from pyinjective.core.market import BinaryOptionMarket, DerivativeMarket, SpotMarket
1212
from pyinjective.core.token import Token
1313
from pyinjective.proto.cosmos.authz.v1beta1 import authz_pb2 as cosmos_authz_pb, tx_pb2 as cosmos_authz_tx_pb
14-
from pyinjective.proto.cosmos.bank.v1beta1 import tx_pb2 as cosmos_bank_tx_pb
14+
from pyinjective.proto.cosmos.bank.v1beta1 import bank_pb2 as bank_pb, tx_pb2 as cosmos_bank_tx_pb
1515
from pyinjective.proto.cosmos.base.v1beta1 import coin_pb2 as cosmos_dot_base_dot_v1beta1_dot_coin__pb2
1616
from pyinjective.proto.cosmos.distribution.v1beta1 import tx_pb2 as cosmos_distribution_tx_pb
1717
from pyinjective.proto.cosmos.gov.v1beta1 import tx_pb2 as cosmos_gov_tx_pb
@@ -28,6 +28,10 @@
2828
from pyinjective.proto.injective.oracle.v1beta1 import tx_pb2 as injective_oracle_tx_pb
2929
from pyinjective.proto.injective.peggy.v1 import msgs_pb2 as injective_peggy_tx_pb
3030
from pyinjective.proto.injective.stream.v1beta1 import query_pb2 as chain_stream_query
31+
from pyinjective.proto.injective.tokenfactory.v1beta1 import (
32+
params_pb2 as token_factory_params_pb,
33+
tx_pb2 as token_factory_tx_pb,
34+
)
3135

3236
REQUEST_TO_RESPONSE_TYPE_MAP = {
3337
"MsgCreateSpotLimitOrder": injective_exchange_tx_pb.MsgCreateSpotLimitOrderResponse,
@@ -957,6 +961,95 @@ def MsgInstantiateContract(
957961
# The coins in the list must be sorted in alphabetical order by denoms.
958962
)
959963

964+
def msg_create_denom(
965+
self,
966+
sender: str,
967+
subdenom: str,
968+
name: str,
969+
symbol: str,
970+
) -> token_factory_tx_pb.MsgCreateDenom:
971+
return token_factory_tx_pb.MsgCreateDenom(
972+
sender=sender,
973+
subdenom=subdenom,
974+
name=name,
975+
symbol=symbol,
976+
)
977+
978+
def msg_mint(
979+
self,
980+
sender: str,
981+
amount: cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin,
982+
) -> token_factory_tx_pb.MsgMint:
983+
return token_factory_tx_pb.MsgMint(sender=sender, amount=amount)
984+
985+
def msg_burn(
986+
self,
987+
sender: str,
988+
amount: cosmos_dot_base_dot_v1beta1_dot_coin__pb2.Coin,
989+
) -> token_factory_tx_pb.MsgBurn:
990+
return token_factory_tx_pb.MsgBurn(sender=sender, amount=amount)
991+
992+
def msg_set_denom_metadata(
993+
self,
994+
sender: str,
995+
description: str,
996+
denom: str,
997+
subdenom: str,
998+
token_decimals: int,
999+
name: str,
1000+
symbol: str,
1001+
uri: str,
1002+
uri_hash: str,
1003+
) -> token_factory_tx_pb.MsgSetDenomMetadata:
1004+
micro_denom_unit = bank_pb.DenomUnit(
1005+
denom=denom,
1006+
exponent=0,
1007+
aliases=[f"micro{subdenom}"],
1008+
)
1009+
denom_unit = bank_pb.DenomUnit(
1010+
denom=subdenom,
1011+
exponent=token_decimals,
1012+
aliases=[subdenom],
1013+
)
1014+
metadata = bank_pb.Metadata(
1015+
description=description,
1016+
denom_units=[micro_denom_unit, denom_unit],
1017+
base=denom,
1018+
display=subdenom,
1019+
name=name,
1020+
symbol=symbol,
1021+
uri=uri,
1022+
uri_hash=uri_hash,
1023+
)
1024+
return token_factory_tx_pb.MsgSetDenomMetadata(sender=sender, metadata=metadata)
1025+
1026+
def msg_update_params(
1027+
self,
1028+
authority: str,
1029+
denom: str,
1030+
amount: int,
1031+
) -> token_factory_tx_pb.MsgUpdateParams:
1032+
coin = self.Coin(amount=amount, denom=denom)
1033+
params = token_factory_params_pb.Params(
1034+
denom_creation_fee=[coin],
1035+
)
1036+
return token_factory_tx_pb.MsgUpdateParams(
1037+
authority=authority,
1038+
params=params,
1039+
)
1040+
1041+
def msg_change_admin(
1042+
self,
1043+
sender: str,
1044+
denom: str,
1045+
new_admin: str,
1046+
) -> token_factory_tx_pb.MsgChangeAdmin:
1047+
return token_factory_tx_pb.MsgChangeAdmin(
1048+
sender=sender,
1049+
denom=denom,
1050+
new_admin=new_admin,
1051+
)
1052+
9601053
def chain_stream_bank_balances_filter(
9611054
self, accounts: Optional[List[str]] = None
9621055
) -> chain_stream_query.BankBalancesFilter:

0 commit comments

Comments
 (0)