mango-explorer/mango/tokenoperations.py

52 lines
1.9 KiB
Python

# # ⚠ Warning
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
# LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
# NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# [🥭 Mango Markets](https://mango.markets/) support is available at:
# [Docs](https://docs.mango.markets/)
# [Discord](https://discord.gg/67jySBhxrg)
# [Twitter](https://twitter.com/mangomarkets)
# [Github](https://github.com/blockworks-foundation)
# [Email](mailto:hello@blockworks.foundation)
import typing
from decimal import Decimal
from solana.publickey import PublicKey
from .accountinfo import AccountInfo
from .combinableinstructions import CombinableInstructions
from .context import Context
from .instructions import build_spl_create_associated_account_instructions
from .instrumentvalue import InstrumentValue
from .tokenaccount import TokenAccount
from .tokens import Token
from .version import Version
from .wallet import Wallet
def build_create_associated_instructions_and_account(
context: Context, wallet: Wallet, owner: PublicKey, token: Token
) -> typing.Tuple[CombinableInstructions, TokenAccount]:
create_ata = build_spl_create_associated_account_instructions(
context, wallet, owner, token
)
ata_address = TokenAccount.derive_associated_token_address(owner, token)
account_info = AccountInfo(
ata_address, False, Decimal(0), owner, Decimal(0), bytes()
)
token_account = TokenAccount(
account_info,
Version.UNSPECIFIED,
owner,
InstrumentValue(token, Decimal(0)),
)
return create_ata, token_account