-
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.
Metadata
Metadata
Assignees
Labels
No labels