Dao

在社交关系中,除了前面提到的点对点关系,还有个重要的属性是群组关系。将一些有共同兴趣爱好或关注同一话题的用户聚集在一起,进行内容分享、交流和互动等活动。

在Relation Protocol中,Dao具有以下意义:

  • 提供一个Dao社交功能

    通过Dao,用户可以创建一个群组,并邀请其他用户加入,从而实现一个有共同兴趣爱好或关注同一话题的社交群组。这种社交功能可以提供一个平台,让用户可以与其他用户分享、交流和互动。

  • 提供Dao管理功能

    在Relation Protocol中,Dao提供了一些群组管理功能,例如群组创建者可以对群组进行管理、添加或删除成员等。这些功能可以帮助群组管理者更好地管理群组,保持群组的秩序和稳定性。

  • 增强用户互动和参与度

    通过Dao,用户可以更加方便地参与到社交群组中,与其他用户互动,分享自己的经验、知识和见解,从而增强用户的互动和参与度。

Schema

DaoRegister

DaoRegister对应的schema 以ttl文件的形式保存至Arweave,交易哈希将作为schemaURI,在初始化合约时传入,参数示例:

ar://7mRfawDArdDEcoHpiFkmrURYlMSkREwDnK3wYzZ7-x4

用于描述由某个地址创建的Dao合约,完整的rdf示例如下:

:Soul_0x0000000000000000000000000000000000000011 p:daoContract :Contract_0x1110000000000000000000000000000000000022 .

schema的组成如下:

  • schema 前缀列表

PREFIX : <http://relationlabs.ai/entity/>
PREFIX p: <http://relationlabs.ai/property/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  • Class

:Soul表示接受和绑定域名解析的地址;:Contract用于表示Dao合约的地址


:Soul a rdfs:Class ;
    rdfs:label "Soul" ;
    rdfs:comment "A soul." .

:Contract a rdfs:Class ;
    rdfs:label "Contract" ;
    rdfs:comment "A contract." .
  • Predicate

p:daoContract用于描述某个地址持有的Dao合约地址

p:daoContract a rdf:Property ;
    rdfs:label "daoContract" ;
    rdfs:comment "The dao contract." ;
    rdfs:domain :Soul ;
    rdfs:range :Contract .

Dao

Dao合约对应的schema 以ttl文件的形式保存至Arweave,交易哈希将作为schemaURI,在初始化合约时传入,参数示例:

ar://UTbYdbPy5Ov2bZ1ikWm_4RhMT5GJPvasE57qtSfL1oQ

描述某个地址加入了当前dao,完整的rdf示例如下:

:Soul_0x0000000000000000000000000000000000000022 p:join :Dao_0x0000000000000000000000000000000000000011 .

schema的组成如下:

  • schema 前缀列表

PREFIX : <http://relationlabs.ai/entity/>
PREFIX p: <http://relationlabs.ai/property/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  • Class

:Soul表示加入群组的成员地址, :Dao表示群组

:Soul a rdfs:Class ;
    rdfs:label "Soul" ;
    rdfs:comment "A soul." .

:Dao a rdfs:Class ;
    rdfs:label "Dao" ;
    rdfs:comment "A dao." .
  • Predicate

p:join 描述地址与群组的关系,p:daoURI 描述dao的资源地址

p:join a rdf:Property ;
    rdfs:label "join" ;
    rdfs:comment "Join a dao." ;
    rdfs:domain :Soul ;
    rdfs:range :Dao .

p:daoURI a rdf:Property ;
    rdfs:label "daoURI" ;
    rdfs:comment "The daoURI of a dao." ;
    rdfs:domain :Dao ;
    rdfs:range xsd:string .

合约

Dao模块由DaoRegister合约和Dao合约组成,我们把DaoRegister作为工厂合约和注册中心,用于部署和记录用户创建的Dao合约。

DaoRegister

interface IDaoRegister is ISemanticSBT {

    /**
      * 部署Dao合约
      * @param to 接受dao合约的地址
      * @param name dao合约的名称
     * @return tokenId 
     */
    function deployDaoContract(address to,string memory name) external returns (uint256);

    /**
     * 查询dao信息
     * @param tokenId 
     * @return owner Dao合约的创建者 
     * @return contractAddress Dao合约地址 
     */
    function daoOf(uint256 tokenId) external view returns (address owner, address contractAddress);
}

Dao

interface IDao is ISemanticSBT {

    //初始化合约,由daoRegister合约调用进行合约初始化
    function initialize(
        address owner,
        address minter,
        string memory name_,
        string memory symbol_,
        string memory baseURI_,
        string memory schemaURI_,
        string[] memory classes_,
        Predicate[] memory predicates_
    ) external;

    /**
     * 设置daoURI
     * @param daoURI  将dao的信息存放至arweave上,把arweave的哈希作为daoURI
     */
    function setDaoURI(string memory daoURI) external;
    /**
     * 是否开放加入
     * @param isFreeJoin true-开放加入;false-非开放,需要dao的创建者将成员拉入dao
     */
    function isFreeJoin() external view returns (bool);

    /**
     * 将指定地址加入dao
     * @param addr 待加入的成员地址
     */
    function addMember(address[] memory addr) external;
    /**
     * 自己主动加入dao
     * @param tokenId 
     */
    function join() external returns (uint256);

    /**
       * 将地址移除dao
       * @param addr 被移除的地址 
      * @return tokenId 
     */
    function remove(address addr) external returns (uint256);

    /**
       * 是否为dao的成员
       * @param addr 被查询的地址 
      * @return isMember 
     */
    function isMember(address addr) external view returns (bool);

}

完整的合约代码可访问:

Last updated