百万富翁的思维密码

第一部分:财富蓝图

  • 金钱有“外部”规律也有“内部”规律。外部规律包括商业知识、资金管理、投资策略等等。
  • 事实是,你的性格、你的思维方式,以及你的信仰是决定你成功程度的关键。
  • 大多数人都没有内在的内里创造并持有大笔资金,无法应对与金钱有关的与日俱增的挑战。
  • 如果想要改变果实,你就得先改变它的根;如果要改变有形的东西,首先从无形的东西着手。
  • 这个世界上你看不见的东西的能量远大于你能看到的东西的能量。
  • 你没有办法改变今天已经悬挂在枝头的果实,但你可以改变明天的果实。而要做到这一点,你得挖开地面,增强根的力量。
  • 金钱是结果,财富是结果,健康是结果,疾病是结果,你的体重也是结果,我们生活在因果世界之中。
  • 你潜意识中的设定决定了你的思维。你的思想决定了你的决策,你的决策决定了你的行为,这些因素最终决定了结果。
  • 如果你获得金钱或成功的动机,从根子上讲是一些无益的因素,诸如恐惧、愤怒,或需要“证明”你自己,那么你永远都得不到快乐。
  • 恐惧不只是一种问题,而且是一种习惯。因此,赚钱多只能改变我们的恐惧方式。
  • 实际上就,和担心赚不到钱相比,人们更担心赚到钱以后又会失去它。
  • 夫妻因钱的问题而争吵,其背后最大的原因不是金钱本身,而是他们的“蓝图”不匹配。
  • 你可以尝试仍和想尝试的东西,你可以增长自己在上商务、市场、销售、谈判、管理等方面的知识,你可以成为房地产或股票市场的专家。
  • 你的收入只能按照你所期望的程度增长。

第二部分:财富档案

富人的17条的思考和行动方法

  • 思想决定情感,情感决定行动,行动决定结果。
  • 你可以选择有利于自己的幸福与成功的思维方式,而不是相反。
  • 中产者通常兼有富人和穷人的思维方式。
  • 人们事实上有两种习惯:有作为的习惯和无作为的习惯。

财富档案1:富人认为:我创造生活;穷人认为:我遭遇生活。

  • 在需要钱的地方,金钱极为重要,而在不需要它的地方,它就显得微不足道了。
  • 吸引力法则认为“同类相吸”,即当你抱怨的时候,实际上你就把“不公正之类的东西”吸入了自己的生活。
  • 你不得不确保自己远离爱抱怨的人。如果万不得已和他们在一起,得确保打上上一把金属伞防御,不然他们胡说八道的东西也会感染到你。
  • 消极的能力可以传染。
  • 没有哪个富人是真正的受害者。

财富档案2:富人玩金钱游戏是为了获胜;穷人玩金钱游戏是为了不输。

  • 如果你的目标是为了过得舒适,那么你是永远不会成为有钱人的。但如果你的目标是想变成有钱人,那么你的生活就会过得极为舒适。

财富档案3:富人以行动致富;穷人靠梦想致富。

  • 大多数人不能得到自己想要的东西,首要原因是他们不知道自己到底想要什么。
  • 如果你没有真正全身心地投入到创造财富的事业当中,你可能就不会成功。

财富档案4:富人大处着眼;穷人小处考虑。

  • 你获得的报酬取决于你给市场带来的价值比例。
  • 大多数人都选择小打小闹。为什么呢?首先他们担心,他们对失败害怕得要死,更有甚者,他们甚至害怕成功。
  • 创业者的定义:通过为别人解决问题而获利的人。

财富档案5:富人关注机会;穷人关注困难。

  • 穷人总是在瞻前顾后的基础上做选择。在任何情况下,他们总是考虑哪些地方有问题或有可能出问题。他们的定式思维是“如果不起作用怎么办?”或经常是“这不会起作用的”。
  • 通常来讲,回报越多,风险越大。因为总是能看到机会,所以有钱人情愿去冒险。他们相信,即使情况再糟,他们也能把自己的钱赚回来。
  • 有钱人冒险是建立在调查研究的基础上的,这意味着他们做研究,开动脑筋,在可靠的信息和事实的基础上作出决策。有钱人是不是要倾其毕生去做调查研究呢?答案是否定的。他们花尽可能短的时间了解情况,然后决定取舍。
  • 运气的因素和致富是有一定联系的,或者,由于这种原因,它也和取得成功有一定联系。
  • 要想成功地赚钱,你得做点什么,投资点什么,或开办什么实业。如果你做了,这是运气,或者也是上苍以更为庞大的力量来奇迹般地支持你。
  • 有钱人关注他们想要的东西,而穷人关注他们不需要的东西。需要再次说明的是,这符合一个普遍原则:“事态会随着你关注的方向发展。”
  • 你关注问题的视野决定了你在生活中能发现什么。关注机会,你就能看到机会;关注困难,你看到的就是困难。
  • 如果想要致富,就把精力放在如何赚钱、守住你赚的钱以及如何投资上。
  • 认为自己可以预知未来是愚蠢的想法:认为可以胸有成竹地应对某天可能发生的情况,并做好自我保护是痴人说梦。你知道吗,宇宙中根本没有真正的直线?生活也不会沿着真正的直线向前发展,它就像蜿蜒前行的河流。多半情况下,你只能看到它拐弯的地方,只有到了这个拐弯,你才能看到前方更远的地方。
  • 如果你真想要了解这个行业,就融入到这个行业中区。你不可能一天的功夫就把它了解得一清二楚。你可以走进“走廊”,找一份这个领域的工作,这样你就真正可以走进“走廊”。扫地刷盘子要比你站在旁观者的角度做上十年的研究了解得多。
  • 有钱人说做就做,他们相信一旦涉足某件事情,他们可以根据形式作出明智的选择,在自己事业的道路上不断修正、调整。

财富档案6:富人羡慕别的富人或成功人士;穷人仇视富人和成功人士。

  • 祝福你想得到的东西。——胡纳哲学

财富档案7:富人喜欢和积极、成功的人交往;穷人喜欢和消极、失败的人交往。

  • 创造财富最快捷、最容易的办法就是学习那些掌握财富的有钱人是如何赚钱的。如果你采取和他们一样的行动,保持和他们一样的心态,那么你就很有可能取得和他们一样的结果。
  • 和有钱人交谈,学习他们是如何思考的,并和他们交换联系方式。如果我们在其他方面有共同语言,那么我们会成为私人好友。
  • 首先,不必费心试着去改变那些消极的人,试图让他们回心转意。这不是你的工作。你的工作是把你所学的东西用于提高自己,改善自己的生活。做一个榜样,做一个成功者,做一个幸福的人,然后或许——我这里强调的是或许——他们将会在你身上看到希望,也想自己做点什么。接下来要说的是,能量具有传染的特性;黑暗会被光明驱散。可能有些人,当身边充满光明时还在力图停留在“黑暗”中。你的工作仅仅是让自己尽可能做到最好。如果他们真想打听你成功的秘诀的话,告诉他们就是了。
  • 我个人永远不会和一个不求进取、阻碍我学习和成长的欲望的人生活,不管从个人情感、精神还是经济上都是如此。
  • 大多数人所赚的钱与他们最亲密的朋友的收入相比,波动在20%以内。
  • 我也特别注意远离有害环境,我找不出任何理由让自己受到有毒能量的感染。这些有毒能量包括争吵、说长道短、陷害等等;同时,我认为还包括观看“不动脑筋”的电视节目,除非你专门用它来作为放松方式,而不单单是娱乐。

财富档案8:富人情愿提升自己和自身的价值;穷人消极地看待销售和提升行为。

财富档案9:富人比自己遇到的困难更强大;穷人比自己遇到的困难更弱小。

  • 财富的增长程度与你的行动成正比。你的目标是使自己强大起来,强大到能够克服任何阻碍你创造财富、守住财富的困难。
  • 把你想成一个容纳财富的容器,如果容器太小,而钱又太多,那么将会发生什么呢?结果当然是你将失去这些钱,多余的钱会从你的容器中溢出来,你不可能拥有超出你的容量的钱。因此,你必须成为一个大容器,这样你就不仅能容纳财富,还能吸引更多的财富。
  • 富人是优秀的接受者;穷人是拙劣的接受者。
  • 如果你说自己有价值,你就有;如果你说自己没有价值,你就没有。无论是有还是么有,你都会生活在自己设定的故事中。
  • 穷人唯一拥有的东西就是贫穷。
  • 做任何事情的方式就是你做每一件事情的方式。
  • 富人选择以结果赚钱;穷人选择用时间赚钱。
  • 穷人拿时间赚钱,而这一方式的问题是,时间是有限的。
  • 如果选择拿时间赚取报酬,那么就是在扼杀自己获得财富的机会。

财富档案12:富人想“两全其美”;穷人想“二择其一”

  • 许多人都认为钱和幸福是互相排斥的,我再次申明,这只不过是“穷人”程序化的结果罢了。

财富档案13:富人关心他们的净资产;穷人在乎他们的工资。

  • 真正的财富指的是净资产,不是工资收入。
  • 影响净资产的4个因素:收入、储蓄、投资、简朴生活。
  • 富人会花更多的时间和精力去学习投资和理财,他们得意于自己是一名优秀的投资者。
  • “简朴”,很少人意识到它的重要性,通过减少你的生活成本,增加你的储蓄,用来投资的资金也就增加了。

财富档案14:富人善于理财;穷人理财无方。

  • 如果处理不好你现在拥有的东西,就别想得到更多。
  • 养成理财习惯比拥有金钱更重要。

财富档案15:富人让钱为其效力;穷人为钱而卖力。

  • 努力工作赚钱,对于富人来说,只是暂时的;但对于穷人来说,却是永久的。
  • 金钱游戏的目标是“从此以后永远不在工作,除非你自己选择要去工作”,而且,如果你要工作的话,你是“自由选择工作而不是必须工作”。
  • 我再强调一遍,让钱为你效力而不是你为钱卖力,那意味着你要节约资金用来投资,而不是把花钱当成天职。有趣的是“富人有很多钱却花得很少,穷人没几个钱却花得很多”
  • 长期和短期对比就是:穷人工作赚钱是为了今天的生活;富人工作赚钱是用来投资,为将来的生活储存资金。
  • 富人购买资产,都是能增值的东西;穷人购买的消费品,都是肯定会贬值的东西;

财富档案16:富人勇往直前;穷人畏首畏尾。

  • 安逸的代价太高,你生活得越安逸,就越不敢去冒险。
  • 再强调一次,真正能让你成长的是当你感觉不容易的时候。
  • 幸福从来都不是来自于平淡无光的生活,也从来不是来自充满假设的幻想。幸福是从我们自然成长及开发我们潜能的过程中产生的。
  • 要获得幸福和成功,最重要的技能是训练和管理你自己的思想。

财富档案17:富人在不断学习中成长;穷人则认为自己无所不知。

  • 如果你没有时间去做你想做而且应该做的事情,那么你会被时间所淘汰;如果你没有钱去学习如何才能成功,那你就会比别人更需要钱。说“我没钱”并不能让一切改观。你什么时候有钱呢?从今天开始的两年或五年后会有什么不同呢?答案很简单:没有任何改变!而且那个时候,你还是会说同样的话。
  • 变富并保持富有的最快的方法就是提升自己!即让自己成为一个“成功”人士。再说一次,你的外在世界只不过是你内心世界的反映罢了。
  • 如果你不从内心提升自己,也许你以某种方式赚到了很多钱,那最多也就是一次意外而已,很快你就会失去它。但是如果你由内而外都是成功人士的话,你不仅能赚钱,还能存钱,让钱增值,最重要的是,你会真正地快乐。
  • 富人的成功顺序:做人、做事、有钱
  • 穷人及中产者认为成功的顺序是:有钱、做事、做人
  • 还有一些只有富人才知道的东西:创造财富的目标,最主要的不是拥有很多钱,而是帮助提升自己,成为最优秀的人。其实,那就是你的总目标,让自己成“人”。
  • 富人不仅坚持学习,而且还确保自己向那些已经到达他们期望的目标的人学习。
  • 富人会采纳比他们富有者的建议,穷人则听取朋友们的建议,而那些朋友跟他一样一无所有。

深入分析NFT合约源码——以Surge Women为例

深入分析NFT合约源码——以Surge Women为例

github地址:https://github.com/youngqqcn/mynft

问题1:NFT(non-fungible token),即非同质化代币,如何理解“非同质化”?在代码层面如何实现的?

答:fungible中文意思是“可互换的”,可互换的东西是没有特殊性的,如果是独一无二的东西则具有了“不可互换的”属性。例如,1元钱的硬币和1元钱的纸钞则可以互换,虽然在形态上不同,但是在作为货币的属性上本质相同,都是代表1元。

至于如何编码实现,前面说了non-fungible的东西必须具备“独一无二”的属性,在编程领域什么东西独一无二呢?
答案很简单,就是唯一的id,用一个整数即可,在solidity中uint256能够表示的整数完全够用。

问题2:NFT的图片(或者音频、视频等)是怎样和智能中tokenId一一对应起来的?

图片等资源文件放在IPFS,智能合约中只存储每个token对应的IPFS上的URI即可。每个NFT项目有一个目录,目录下可以放很多资源文件,在构造合约的时候将目录在IPFS上的URI设置为baseURI,那么每个token的资源文件在IPFS的URI就确定了。例如,某个NFT项目在IPFS上总目录的URI为ipfs://QmYVsw73haPgm9jK9BopsuKtzuxLANjYn75xeHLpht13D5,tokenId为1802的token在IPFS上的URI则为ipfs://QmYVsw73haPgm9jK9BopsuKtzuxLANjYn75xeHLpht13D5/1802

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from web3 import Web3
import json

# https://etherscan.io/tx/0xbede5e44cc631303a22d066cc269f989469742b5bb6d9a74185e146dab9211e4
# https://mainnet.infura.io/v3/8a264f274fd94de48eb290d35db030ab
# contract address is 0x0632aDCab8F12edD3b06F99Dc6078FE1FEDD32B0

from web3 import Web3
my_provider = Web3.HTTPProvider('https://mainnet.infura.io/v3/8a264f274fd94de48eb290d35db030ab')
w3 = Web3(my_provider)

def main():

contract_address = '0x0632aDCab8F12edD3b06F99Dc6078FE1FEDD32B0'
contract_abi = json.load(open('surge.abi', 'r'))
# print(contract_abi)

mycontract = w3.eth.contract(address=contract_address, abi=contract_abi)
name = mycontract.functions.name().call()
print(name)

symbol = mycontract.functions.symbol().call()
print(symbol)

tokenURI = mycontract.functions.tokenURI(1802).call()
print(tokenURI)

pass

if __name__ == '__main__':
main()

运行打印的结果是:

1
2
3
Surge Women Passport
SURGE
ipfs://QmYVsw73haPgm9jK9BopsuKtzuxLANjYn75xeHLpht13D5/1802

项目在IPFS的总目录:
https://ipfs.io/ipfs/QmYVsw73haPgm9jK9BopsuKtzuxLANjYn75xeHLpht13D5

https://tth-ipfs.com/ipfs/QmYVsw73haPgm9jK9BopsuKtzuxLANjYn75xeHLpht13D5
ipfs浏览器中的链接:ipfs/Qmaseu2BbetLjA6eU7mQ2THEkjdBum5wq1EfuLAY2AoiEA/1802.png

分析tokenURI函数的代码

1
2
3
4
5
6
7
8
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

// baseURI是目录的URI
string memory baseURI = _baseURI();
// 将目录的URI和tokenId拼接在一起就是token的URI
return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
}

而 _baseURI由 Surge合约重写了父合约的_baseURI函数。Surge合约在构造函数中设置了baseURI,也就是在构造合约时已经设置了baseURI

1
2
3
4
5
6
7
8
9
10
11
12
constructor(
string memory _name,
string memory _symbol,
string memory _baseTokenURI,
uint128 _price,
address _receiver,
uint256 _royalties
) payable ERC721A(_name, _symbol) {
setBaseURI(_baseTokenURI);
setPrice(_price);
setRoyalties(_receiver, _royalties);
}

presaleMint为什么要用到merkleProof?

项目方做了预售,对所有参加预售的地址构造了一棵merkle tree,并将merkle root填入智能合约,调用presale的地址必须在merkle tree中。

使用merkle tree可以隐藏了具体地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// @notice Presale minting verifies callers address is in Merkle Root
/// @param _amountOfTokens Amount of tokens to mint
/// @param _merkleProof Hash of the callers address used to verify the location of that address in the Merkle Root
function presaleMint(uint256 _amountOfTokens, bytes32[] calldata _merkleProof)
external
payable
verifyMaxPerUser(msg.sender, _amountOfTokens)
verifyMaxSupply(_amountOfTokens)
isEnoughEth(_amountOfTokens)
{
require(status == SaleStatus.Presale, "Presale not active");

bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
require(MerkleProof.verify(_merkleProof, merkleRoot, leaf), "Not in presale list");

_mintedAmount[msg.sender] += _amountOfTokens;
_safeMint(msg.sender, _amountOfTokens);
}

设置merkle root
https://etherscan.io/tx/0x4d6e0c07516115b8a803f77fe3067d52091c8d888eecb8f60fe897a68501ea27

1
2
3
4
5
/// @notice Set Presale Merkle Root
/// @param _merkleRoot Merkle Root hash
function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
merkleRoot = _merkleRoot;
}

presale

https://etherscan.io/tx/0x387dd09362758758b52d56dd2093724039fbd5592b13613cc347a2c1a216b581

同一个地址2次调用presale,那么它提供的merkle proof两次肯定是一样的。
https://etherscan.io/tx/0x5c76c3e78933ccc9f50e3a6f979226c02b9ab96ed320cbd68d4fbf3361c2b366
https://etherscan.io/tx/0xe64591ba680b9fb18f3bac61a20b7343801f03a9905d1f260df4d945089a056e

认知世界的经济学(笔记)

认知世界的经济学(笔记)

第1章 经济学是什么

理论课1——经济学世界观

经济学研究什么

  • 个体的选择

经济学和金融学的区别

  • 钱的选择

经济学的前提假设

  • 资源永远稀缺的
  • 人是理性的

取舍

课程地图

  • 第一模块:经济学核心原理
  • 第二模块:消费者如何选择
  • 第三模块:企业如何决策
  • 第四模块:市场如何运行
  • 第五模块:金钱如何分配

经济学的历史观

  • 现在:现在的经济制度存在系统性漏洞——就业问题和贫富差距增大
  • 未来:凯恩斯主义、货币主义

理论课3——经济学道德观

第2章 经济学的基本方法

1、个体分析
2、群体分析
3、模型与数据检验

机会成本

什么是机会成本?

选择中放弃选择最高价值

她那时还太年轻,不知道命运馈赠的礼物,早已暗中标好了价格。
——斯蒂芬·茨威格《断头皇后》

机会成本有何用?

沉没成本

  • 沉没成本:人们在决定是否去做一件事情的时候,不仅是看这件事对自己有没有好处,而且也看过去是不是已经在这件事情上有过投入。我们把这些已经发生不可收回的支出,如时间、金钱、精力等称为“沉没成本”(Sunk Cost)。

边际分析

  • 边际成本:增加一单位的产量随即而产生的成本增加量即称为边际成
  • 边际收益:是指增加一单位产品的销售所增加的收益,即最后一单位产品的售出所取得的收益。

存量与增量


个体选项优化

1、预算约束与可行选项

2、权衡选项:成本收益分析

充分考虑影响因素、准确估值

3、激励

群体均衡

  • 群体分析:

  • 均衡:

  • 合成谬误:

  • 搭便车:

模型与数据检验

步骤

  • 1、设立假说
  • 2、解释假说
  • 3、数据检验
  • 4、查看结果

归因谬误

  • 把先后发生的事情当作因果关系
  • 把同事发生的两类事情当成有因果关系

有相关关系,却没有因果关系?

  • 遗漏因素
  • 反向因果关系
  • 巧合

马斯洛的需求层次理论

1
2
3
4
5
6
    /理想人生价值\   自我实现需求
/ 尊重需求 \ (自尊、他尊)
/ 社交需求 \ (归属和爱的需求)
/ 安全需求 \ (人身、健康、职业安全等)
/ 生理需求 \ (食物、水、睡眠)

第三章—经济学的核心逻辑

需求

需求量:在某个价格下,消费者愿意且能够购买的某种商品或服务的数量

  • 购买意愿
  • 购买能力

需求定律:价格与需求之间呈反向关系:

  • 替代效应
  • 收入效应

需求曲线移动:

  • 收入变化
  • 替代品
  • 互补品
  • 人的变化
  • 消费者对未来的预期
  • 消费者的喜好、偏好的变化

供给

供给量:在某个价格下,卖家愿意且能够出售的某种商品或服务的数量

  • 供给意愿
  • 供给能力

供给定律:价格与供给呈正相关关系

供给曲线:

均衡/价格


PPI(Producer Price Index):生产价格指数

PMI(Purchasing Manager’s Index):采购经理指数


第二模块——消费者如何选择的?

  • 消费者的偏好
  • 商品或服务的价格
  • 消费者的收入

第4章——消费者选择模型

效应

边际效用递减规律

基数效用论
序数效用论

无差异曲线

预算线

网路外部性:

用户转换成本:


案例——婚姻与恋爱关系

  • 付出与回报
  • 处理矛盾,解决问题,不要冷战
  • 新鲜感降低

第5章——时间与风险

风险补偿

风险:不确定性

风险的计算:

时间补偿:

通胀

利率:时间补偿+风险补偿

利率计算:

  • 年利率 = 月利率 * 12
  • 月利率 = 日利率 * 30

单利、复利

复利计算:m * (1 + r)^n

折现率:

贴现率:

第六章——消费者是如何选择的?

过度自信:

框架效应:

锚定效应:

人们更偏向于维持现状:

压力线:

支撑线:

峰终定律:如果在一段体验的高峰处结尾,体验是愉悦的,那么对整个体验的感受就是愉悦的。

心理账户:

第七章——

需求弹性

交叉弹性:

消费者剩余:

第八章——企业

企业的目的:利润最大化

企业组织:

成本分析

显性成本:

隐性成本:没有产生会计成本(例如,资金成本,老板自己的人力成本,企业自己拥有的办公楼,小店自己的店铺,企业的专利)。隐形成本需要用机会成本来度量。

会计成本:

会计利润、经济利润

显性成本=会计成本

显性成本 + 隐性成本 = 经济成本 = 机会成本的总和 = 生产成本

固定成本:

可变成本:

总成本:

平均总成本 = 平均固定成本 + 平均可变成本

边际产量:

边际报酬递减:固定其他资源,只改变单一资源

边际成本:
平均成本:

企业短期成本:

边际成本:

只要 增加成本 > 产出 ,就可以增加投入

规模经济、规模不经济

利润:

边际成本大于市场价格,增加的产量带来的是亏损

通过平均成本计算利润:

定价:

消费者剩余与生产者剩余

供给弹性:

  • 企业的库存情况
  • 商品类目的大小
  • 生产的难度、门槛、资源的耗费
  • 时间长短

NFT学习

NFT学习

ERC721官网:http://erc721.org/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IERC721 /* is ERC165 */ {
// 事件:转移token
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

//事件: 授权approved管理owner的tokenId
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

//事件: 授权operator管理所有资产
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

// 获取token的数量
function balanceOf(address owner) external view returns (uint256 balance);

// 获取token所有者
function ownerOf(uint256 tokenId) external view returns (address owner);

// 安全转移,首先会检查合约是否能够识别ERC721协议,以防止转进区的NFT被锁住
// from, to 都不能是零地址
// 如果调用者不是from,那么,在此之前必须已经被授权
// 如果to是智能合约,那么,to必须实现IERC721Receiver-onERC721Received
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;


// 转移函数
function transferFrom(
address from,
address to,
uint256 tokenId
) external;


// 授权函数
function approve(address to, uint256 tokenId) external;


// 获取某个token授权的账户
function getApproved(uint256 tokenId) external view returns (address operator);


// 授权operator管理所有资产
function setApprovalForAll(address operator, bool _approved) external;


// 检查是否有授权
function isApprovedForAll(address owner, address operator) external view returns (bool);


// 同上,多了一个data参数
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}

interface ERC165 {
/// @notice Query if a contract implements an interface
/// @param interfaceID The interface identifier, as specified in ERC-165
/// @dev Interface identification is specified in ERC-165. This function
/// uses less than 30,000 gas.
/// @return `true` if the contract implements `interfaceID` and
/// `interfaceID` is not 0xffffffff, `false` otherwise
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}


//用于接收ERC721的智能合约必须实现此 `IERC721Receiver` 接口
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
// 当智能合约收到ERC721 token时,此函数就会被调用,并返回一个selector以确认收到了token
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}

所谓NFT(Non-Fungible Token)就是保证tokenId唯一即可,关于tokenId生成,有很多方式。CryptoKitty中是用数组的index

1
2
3
4
5

Kitty[] kitties;

uint256 newKittenId = kitties.push(_kitty) - 1; // push 会返回数组的长度,用元素的index作为token的ID

小王子

最近看完了《小王子》,非常经典的童话。如作者所写,这是写给大人们看的童话,因为每个大人都曾经是小孩子,可是很多大人忘记了这一点。

每个人心理都有一个小王子或曾经拥有过,在成长过程中,慢慢地成了“大人”,大人们都喜欢把东西说的清清楚楚,总是在他们自己的星球沉醉于他们自己事情。

《小王子》中经典的句子太多了,我想我们不应该执迷于寻章摘句,而是应该用心品味原著才,“重要的东西是看不到的”。

愿我们在夜晚仰望星空时,拥有一颗会笑的星星。

  • Copyrights © 2021-2025 youngqqcn

请我喝杯咖啡吧~