
# 合约结构
Java语言合约由合约文件及依赖包构成，包含包声明、依赖包导入、智能合约的方法定义。
![](https://support.huaweicloud.com/devg-bcs/public_sys-resources/note_3.0-zh-cn.png)
合约文件中，用户可自定义合约函数，需要实现Contract的init和invoke方法。
合约的结构如下：
```
package com.huawei.poissonchain;
import com.huawei.huaweichain.contract.Contract;
import com.huawei.huaweichain.contract.ContractException;
import com.huawei.huaweichain.contract.ContractStub;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExampleContract implements Contract {
    // 功能：合约的初始化（Init）接口，需要合约开发者在智能合约中实现此接口，供合约使用者在启动合约之后调用。注意，一般将合约启动时，首先需要执行且只需要执行一次的逻辑放到此方法中
    // 入参：stub是智能合约SDK为本次合约执行交易准备的上下文对象，可以通过stub提供的API函数，获取交易请求相关信息、读写状态数据库、写日志等
    // 返回值：需要返回给合约调用者（区块链客户端）的信息，没有信息需要返回时，返回值可以为null
    // 抛出异常：初始化过程的异常信息，可由合约编写者自行设定异常逻辑
    @Override
    public byte[] init(ContractStub stub) throws ContractException {
    }
    // 功能：合约被调用（invoke）接口，需要合约开发者在智能合约中实现此接口，将主要的合约执行逻辑，放到此接口内，供合约使用者调用。
    // 入参：stub是智能合约合约SDK为本次合约执行交易准备的上下文对象，可以通过stub提供的API函数，获取交易请求相关信息、读写状态数据库、写日志等
    // 返回值：需要返回给合约调用者（区块链客户端）的信息，没有信息需要返回时，返回值可以为null
    // 抛出异常：初始化过程的异常信息，可由合约编写者自行设定异常逻辑
    @Override
    public byte[] invoke(ContractStub stub) throws ContractException {
    }
}
```
