-
Notifications
You must be signed in to change notification settings - Fork 28
Open
Description
For token swaps it would be very helpful to be able to copy balances from one token contract to another. I tried it out but it doesn't work.
Token1
# LST001
balances = Hash(default_value=0)
# LST002
metadata = Hash()
@construct
def seed():
# LST001 - MINT SUPPLY to wallet that submits the contract
balances[ctx.caller] = 1_000_000
# LST002
metadata['token_name'] = "MY TOKEN NAME"
metadata['token_symbol'] = "TKN"
metadata['operator'] = ctx.caller
# LST002
@export
def change_metadata(key: str, value: Any):
assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
metadata[key] = value
# LST001
@export
def transfer(amount: float, to: str):
assert amount > 0, 'Cannot send negative balances!'
assert balances[ctx.caller] >= amount, 'Not enough coins to send!'
balances[ctx.caller] -= amount
balances[to] += amount
# LST001
@export
def approve(amount: float, to: str):
assert amount > 0, 'Cannot send negative balances!'
balances[ctx.caller, to] += amount
# LST001
@export
def transfer_from(amount: float, to: str, main_account: str):
assert amount > 0, 'Cannot send negative balances!'
assert balances[main_account, ctx.caller] >= amount, 'Not enough coins approved to send! You have {} and are trying to spend {}'\
.format(balances[main_account, ctx.caller], amount)
assert balances[main_account] >= amount, 'Not enough coins to send!'
balances[main_account, ctx.caller] -= amount
balances[main_account] -= amount
balances[to] += amount
@export
def export_balances():
return balances.get()Token2
# LST001
balances = Hash(default_value=0)
# LST002
metadata = Hash()
@construct
def seed():
# LST001 - MINT SUPPLY to wallet that submits the contract
balances[ctx.caller] = 1_000_000
# LST002
metadata['token_name'] = "MY TOKEN NAME"
metadata['token_symbol'] = "TKN"
metadata['operator'] = ctx.caller
# LST002
@export
def change_metadata(key: str, value: Any):
assert ctx.caller == metadata['operator'], 'Only operator can set metadata!'
metadata[key] = value
# LST001
@export
def transfer(amount: float, to: str):
assert amount > 0, 'Cannot send negative balances!'
assert balances[ctx.caller] >= amount, 'Not enough coins to send!'
balances[ctx.caller] -= amount
balances[to] += amount
# LST001
@export
def approve(amount: float, to: str):
assert amount > 0, 'Cannot send negative balances!'
balances[ctx.caller, to] += amount
# LST001
@export
def transfer_from(amount: float, to: str, main_account: str):
assert amount > 0, 'Cannot send negative balances!'
assert balances[main_account, ctx.caller] >= amount, 'Not enough coins approved to send! You have {} and are trying to spend {}'\
.format(balances[main_account, ctx.caller], amount)
assert balances[main_account] >= amount, 'Not enough coins to send!'
balances[main_account, ctx.caller] -= amount
balances[main_account] -= amount
balances[to] += amount
@export
def import_balances(token_contract: str):
b = I.import_module(token_contract).export_balances()
balances.set(b.get())If i execute import_balances() in the Token2 contract by providing the token contract of Token1 the transaction goes through without errors but balances are not copied.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels