INT:十亿用户的社交图谱

TRANSLATION

十亿用户的社交图谱

function_beforeTokenTransfer(addressfrom,addressto,uint256)pureoverrideinternal{//Disabletokentransfers

//ThefollowingfunctionsareoverridesrequiredbySolidity

}

如果你熟悉Solidity,你可以看到这个非常简单的合约试图做什么。

首先是扩展:

ERC721Enumerable?扩展被包括在内,因此代币持有者可以被社交网络客户端列出来,而不必扫描整个链。我使用?Pausable?是因为你应该能够暂停造币,以便基本上锁定你的账户一段时间,即停止接受新的粉丝。Ownable?是必不可少的,因为有些事情只有合约所有者应该做。我认为没有必要使用更强大的角色功能。ERC721Burnable?在这里,因为你需要能够销毁代币,以便删除关注关系。这里面包含的标准?burn()?函数有我们需要的权限,即只有所有者或令牌所有者可以销毁代币。我包含了Counters,这样?tokenID?就会自动递增,这很方便。现在对OpenZeppelin向导的输出进行修改:

safeMint()?被修改后,只有合约的所有者可以将代币铸币到其他人的地址。对于所有非所有者,你只能向你调用合约的地址铸币。_beforeTokenTransfer()?被重写,这样它就基本上禁止了转让代币的能力,创造了一个简单的灵魂绑定的代币。relationship()?函数是一个方便的方法,确保有一个简单的方法来查询合约并确认NFT代表什么样的关系。我并不赞成包括这个,但它似乎很有用。这一切真的很简单,对于OCG的屏蔽和OCG的静音变体,你要做以下小改动:

改变合约名称和符号改变?relationship()?和可能的?baseURI()?的返回值,以反映你所代表的关系。把?safeMint()?和?burn()?都变成?onlyOwner?函数,这样只有合约所有者可以调用这两个函数。显然,这将取决于平台是否以正确的方式履行这些合约。不过,这没有听起来那么有威胁性和不稳定,因为如果一个特定的社交平台不履行你所关心的合约,就不要使用它。

增加付费关注

你可以在?safeMint?中加入?payable,然后使用?setMintRate?来设定人们必须为以下内容向你支付的价格。因此,类似于这样的内容:

uint256publicmintRate=0

functionsafeMint(addressto)publicpayable{//Requirepay-to-followrequire(msg

我相信我还能想到许多其他的调整和功能来添加到这个建议中,但最好从简单和容易理解的东西开始。

建议2:链式连接图

上面描述的OCG合约足够简单,但该方案有一些特质,可能会使很多人产生分歧:

所有的东西都是公开的,在链上的,包括屏蔽和静音。你不能这样做锁定账户,但解决这个问题的办法可能是使用一个替代账户。每一个行动都要花费gas,这意味着你必须对你关注的人、屏蔽和静音做出真正的选择。但如果gas费用足够高,那么这可能会使网络无法使用。对于一个网络或一个特定的账户来说,付费关注可能是也可能不是一个理想的功能,但你会有这样的选择。鉴于不是每个人都会喜欢这个建议的这些特质,我想提出一套替代的社交合约,给用户和平台更细化的控制,特别是谁能看到什么样的信息,而且使用成本更低。

functionrelationship()public{return"clgfollows";}functionpause()publiconlyOwner{_pause();}functionunpause()publiconlyOwner{_unpause();}functionsafeMint(addressto)publiconlyOwner{uint256tokenId=_tokenIdCounter

function_beforeTokenTransfer(addressfrom,addressto,uint256)pureoverrideinternal{//Disabletokentransfers

}

所有的扩展都与OCG相同,只是我没有包括?ERC721Enumerable,因为不清楚是否有人想让他们的CLGFollows代币被列举出来

至于函数方面,我对OpenZeppelin向导的输出做了以下修改:

relationship():与OLG一样,它返回社交合约的类型。同样,对于Solidity合约来说,这可能没有必要,我也没有见过这样做,但尽管如此,我觉得我想让合约自我报告它的类型。所以我不知道--如果这冒犯了你,请忽略。listURI()?返回一个指向JSON对象的链接,该对象是你正在关注的ENS名称列表。我们希望这个URI能被标记为隐私,但这并不是必须的。大多数情况下,你会使用CLGFollowsNTFT,把它发布到社交平台拥有的地址。这样,该平台可以读取你的关注列表,并向你展示正确的帖子。

但你也可以把这些NTFTs发给追随者,以便你的追随者可以发现其他追随者。你可以通过空投给追随者,或者通过解禁造币,让任何人造币来实现。

所有其他合约的工作方式与上述完全相同,但有不同的名称和符号,并从?relationship()?和?listURI()?返回不同的值。

可能的变数

如果你担心你的列表从不同的服务中泄漏,那么把listURI()变成更像?tokenURI(uint256tokenId)?的东西是非常直接的,即签名是?listURI(uint256tokenId),它把?tokenID?连接到一个基本URI的末尾,这样每个token持有者就可以得到自己的列表URL。这个功能与列表主机上的一些逻辑相结合,可以让你把列表隔离开来,使不同的令牌持有者得到主图的不同子图。这样一来,如果一个平台被拥有,那么只有我的图的那一部分被泄露了。

和OCG一样,你可以把?safemint?变成一个可支付的函数,并向访问你的列表的人收费。请看OCG部分的代码,以了解这个例子的情况。

你可能希望能够更新?tokenURI()?和/或?listURI()?返回的URLs,在这种情况下,你需要将这些URLs存储在变量中,在构造函数中初始化它们,并为更新它们提供?onlyOwner?setter函数。这将增加你的铸币成本,但如果你只打算把它们给服务而不是个人,这可能并不重要。

服务

这里概述的两个建议都提供了一些集中式托管服务的地方,即使它只是一个权宜之计,在生态系统过渡到像IPFS这样的分布式系统之前。

最明显的服务类型是托管由URI功能之一返回的任何东西--配置文件数据、NTFT元数据和代币控制的JSON列表。

另一个有用的服务是一种专门的Infura版本,通过API暴露链上的社交数据。或者,Infura可以为社交数据提供一个专门的API。

最后,可以有第三方服务来验证账户,以满足用户和组织的需求。

总结

我不知道我是否期望我的链上社交图谱建议会以我在这里描述的形式被采纳。我提出这些想法,更多的是为了引发对话,讨论我们如何从目前完全锁定平台的状态有效地过渡到更便携的状态,即你拥有你的图谱,并可以轻松地将它随身携带。

上述内容有一部分看起来有点像web5的提议,但关键的区别在于,我的两个想法被设计得更简单,并利用了智能合约和现有的链上身份提供者。

如果你从这篇文章中没有其他收获,我希望我至少已经说明,在一个分布式账本技术和智能合约的世界里,我们任何人都没有必要在2022年被锁定在一个社交网络里。解决这个锁定问题的工具是广泛存在的,我们只需要拿起它们并使用它们。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

TRXFTC:深度解读CFTC起诉书:将置币安于死地?

就在?TikTok?首席执行官周受资结束了美国国会“灵魂拷问”之后,?3月27日晚间,彭博社披露美国商品期货交易委员会在芝加哥联邦法院对加密货币交易平台币安及其首席执行官CZ、第一任首席运营官S.

[0:15ms0-8:235ms