# 如何与Starknet智能合约交互

By [tala](https://paragraph.com/@talang) · 2023-11-21

---

**先决条件**
--------

### **确保 Starkli 和 Scarb 安装正确**

确保以下命令在您的系统上正常运行。

    starkli --version
    scarb --version
    

**介绍**
------

Starkli 通过两种主要方法实现与智能合约的交互：

*   `call`用于只读功能。
    
*   `invoke`用于修改状态的写入函数。
    

**调用函数**
--------

该`call`命令允许在不发送交易的情况下查询智能合约功能。

作为示例，您可以使用`get_owner`不需要任何参数并返回当前所有者的地址的函数：

    starkli call \
        0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e \
        get_owner
        --network=goerli-1
    

这将返回我们在部署期间传递给构造函数的地址：

    [    "0x02cdab749380950e7a7c0deff5ea8edd716feb3a2952add4e5659655077b8510"]
    

**调用函数**
--------

要修改智能合约的状态，请使用该`invoke`命令。与命令不同`call`，`invoke`向网络提交交易。

在此示例中，我们将调用该`transfer_ownership`函数将所有权从部署者地址转移到不同的智能钱包地址：

    starkli invoke \
        0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e \
        transfer_ownership \
        0x011088d3cbe4289bc6750ee3a9cf35e52f4fa4e0ac9f42fb0b62e983139e135a \
        --network=goerli-1
    

当交易在L2上被接受后，您可以通过`get_owner`再次调用该函数来确认状态转换：

    starkli call \
        0x014825acb37c36563d3b96c450afe363d2fdfa3cfbd618b323f95b68b55ebf7e \
        get_owner \
        --network=goerli-1
    

该`get_owner`函数现在返回新的所有者地址，确认所有权转移成功。

---

*Originally published on [tala](https://paragraph.com/@talang/starknet-4)*
