ใครจะได้ประโยชน์ ในโลกยุค Sustainability
ประเด็นเรื่องความยั่งยืนของโลก ทั้งในด้านสิ่งแวดล้อมและสังคม ได้รับการถูกกล่าวถึงมายาวนาน
แต่ทำไมผู้คนจึงพูดถึงเรื่องนี้กันมากขึ้น ในช่วง 2-3 ปี ที่ผ่านมา
นั่นก็เพราะผลกระทบจากปัญหาเหล่านี้ กำลังเป็นเรื่องใหญ่ที่ยากจะมานั่งใจเย็นได้
อย่างเช่นปัญหาจากการเปลี่ยนแปลงของสภาพภูมิอากาศ (Climate Change)
หากก๊าซคาร์บอนไดออกไซด์ยังถูกปล่อยในอัตราเดิม จนถึงปี 2100
เศรษฐกิจโลกจะเกิดความเสียหายสูงกว่า 550 ล้านล้านเหรียญสหรัฐ
นานาประเทศจึงได้ร่วมกันตั้งเป้าหมายในการลดการปล่อยก๊าซเรือนกระจกเป็นศูนย์
หรือที่เรียกว่า Net-Zero Greenhouse Gas Emission
อาทิ
- ระดับโลก ภายใต้ Paris Climate Agreement
- ฝั่งเอเชีย อย่างจีน ที่ตั้งเป้าปล่อยก๊าซคาร์บอนไดออกไซด์สุทธิเป็นศูนย์ ภายในปี 2060
- ฝั่งสหรัฐอเมริกา ภายใต้รัฐบาลโจ ไบเดน ตั้งงบลงทุน 1.7 ล้านล้านเหรียญสหรัฐ ภายใต้ Climate and Environmental Justice Proposal
“ความยั่งยืน” ไม่เพียงเป็นนโยบายระดับประเทศ
แต่ยังเป็นเรื่องสำคัญอันดับต้น ๆ ในโลกธุรกิจ
เมื่อผู้บริโภคตื่นตัวกันมากขึ้น ทั้งในเรื่องสิ่งแวดล้อม และความเท่าเทียมทางสังคม
และพร้อมที่จะเลิกสนับสนุนธุรกิจที่ไม่มีความรับผิดชอบ
เช่น การแบนสินค้าที่มีกระบวนการผลิตละเมิดสิทธิมนุษยชน
โจทย์สำคัญในยุคนี้ของโลกธุรกิจ..
ก็คือ ทำอย่างไรให้ธุรกิจเติบโต โดยไม่ส่งผลทำลายโลกและสังคม เพื่อสร้างความยั่งยืนในอนาคต
ความท้าทายนี้ สำคัญต่อการอยู่รอด หรือการเป็นผู้ชนะ ของโลกธุรกิจเลยทีเดียว
แล้วเรื่องนี้สำคัญต่อการลงทุนของเราอย่างไร ?
ลงทุนแมนจะเล่าให้ฟัง..
ผลจากการตระหนักถึงความสำคัญของความยั่งยืน กำลังก่อให้เกิดแรงขับเคลื่อนเศรษฐกิจใหม่ ๆ
ที่เป็นมิตรต่อโลกและสังคม เรียกว่า CLIC Economy
Lombard Odier องค์กรไพรเวทแบงกิ้งระดับโลก
คาดการณ์ว่า CLIC Economy จะส่งผลต่อทุกอุตสาหกรรม
และจะเกิดเม็ดเงินลงทุนหมุนเวียนกว่า 5.5 ล้านล้านเหรียญสหรัฐต่อปีเลยทีเดียว
โดย CLIC Economy ที่ว่านี้ จะประกอบไปด้วย
C (Circular) คือ การใช้ทรัพยากรหมุนเวียน
L (Lean) คือ การใช้ทรัพยากรอย่างมีประสิทธิภาพ
I (Inclusive) คือ การสร้างความเท่าเทียมด้านเศรษฐกิจและสังคม
C (Clean) คือ การดำเนินการที่ไม่เป็นพิษต่อสิ่งแวดล้อม
พูดง่าย ๆ ว่าแรงขับเคลื่อนเศรษฐกิจที่ว่านี้
กำลังผลักดันธุรกิจให้กลายเป็น “ธุรกิจแห่งความยั่งยืน” นั่นเอง
หลายคนอาจสงสัยว่า..
แล้วธุรกิจเทคโนโลยีที่กำลังเติบโตอย่างก้าวกระโดด
จะปรับตัวมาเป็น “ธุรกิจแห่งความยั่งยืน” ได้อย่างไร ?
รู้หรือไม่ว่า หนึ่งในเป้าหมายสำคัญของ Apple คือการพัฒนาผลิตภัณฑ์ ที่มาจากวัสดุรีไซเคิล 100%
รวมทั้งการใช้พลังงานสะอาดในกระบวนการผลิตทั้งหมด ภายในปี 2030
เช่นเดียวกัน TSMC ผู้ผลิตเซมิคอนดักเตอร์ระดับโลก ที่มีเป้าหมาย Positive Impact ต่อโลกให้มากที่สุด เช่น ลดของเสียในกระบวนการผลิตและลดมลพิษทางอากาศ
สะท้อนได้ว่า “เทรนด์ Sustainability” ไม่ใช่แค่เรื่อง CSR
แต่กำลังเป็น “หนึ่งเป้าหมายหลัก” ในโลกธุรกิจ เพื่อสร้างการเติบโตอย่างยั่งยืนในระยะยาว
ธุรกิจที่ปรับตัวก่อน ย่อมอยู่รอด และก้าวขึ้นไปสู่ชัยชนะในโลกธุรกิจ
ส่วนธุรกิจที่มองข้ามความสำคัญนี้ อาจไม่ได้รับการยอมรับจากผู้มีส่วนได้ส่วนเสีย ทั้งภาครัฐ พนักงาน ลูกค้า คู่ค้า และนักลงทุน จนต้องล้มหายตายจากไปในอนาคต
ทีนี้น่าจะมองออกแล้วว่า..
ธุรกิจที่กำลังเติบโต และกำลังสร้างความยั่งยืน ด้วยการเป็น “ธุรกิจแห่งความยั่งยืน”
ก็คือโอกาสสำคัญในการลงทุน ที่จะสร้างผลตอบแทนที่ดีในระยะยาว หรือที่เรียกว่า Long Term Growth นั่นเอง
จึงไม่แปลกใจ หากปัจจุบันนี้จะมีรูปแบบการลงทุน Sustainable Investing เกิดขึ้นมากมาย
คำถามคือ แล้วเราจะเลือกลงทุนในธีม Sustainability อย่างไรดี ?
หนึ่งในผู้นำด้าน Sustainable Investing
ก็คือ KBank Private Banking ซึ่งเป็นไพรเวทแบงก์รายแรกในประเทศไทยที่ให้ความสำคัญกับเรื่องนี้อย่างจริงจัง
และยังมีพันธมิตรเป็นผู้ให้บริการไพรเวทแบงกิ้งระดับโลก
อย่าง Lombard Odier ผู้มีประสบการณ์กว่า 225 ปี
มองว่า จุดเด่นของ Sustainable Investing
คือ การลงทุนระยะยาว ที่จะสร้างความมั่งคั่งแบบ Smooth และ Sustainable
ไปพร้อมกับความยั่งยืนของโลก
ธีมการลงทุนนี้ จึงอาจจะไม่เหมาะสำหรับนักลงทุนลักษณะ Momentum Play
ที่เน้นเล่นรอบระยะสั้น แบบจับจังหวะราคาขึ้นลง
ภายใต้ตัวเลือก Sustainable Investing ที่มีอยู่มากมาย
สิ่งที่นักลงทุนต้องพิจารณา คือ การพยายามมองหากองทุนหลักต่างประเทศที่มีองค์ความรู้ ความเชี่ยวชาญ และลงมือทำจริง
โดยเข้าไปพิจารณาถึงเนื้อในของการทำงานกองทุนนั้น ๆ
ด้วยเหตุนี้ ผู้เชี่ยวชาญที่จะทำหน้าที่แนะนำการลงทุน ทั้งในเรื่องการดำเนินการของธุรกิจตามเป้าหมายและระดับราคาที่เหมาะสม จึงกลายเป็นสิ่งที่จำเป็นนั่นเอง
ตัวอย่างกองทุนรวมประเภท Feeder Fund ที่ KBank Private Banking แนะนำแก่ลูกค้า
ในธีมการลงทุน Sustainable Investment ที่น่าสนใจ
คือ กองทุน K-CLIMATE และ กองทุน K-CHANGE
แล้วกองทุน K-CLIMATE น่าสนใจอย่างไร ?
กองทุน K-CLIMATE มีจุดเด่นที่น่าสนใจ
คือ การลงทุนในธุรกิจที่สามารถเติบโต มีศักยภาพในการแข่งขันระยะยาว
พร้อมมีส่วนร่วมในการลดการปล่อยก๊าซคาร์บอนไดออกไซด์
รวมทั้งธุรกิจที่ปรับตัวเพื่อรองรับผลกระทบจากการเปลี่ยนแปลงสภาพภูมิอากาศ (Climate Change)
ธุรกิจกลุ่มนี้ ถือเป็นกลุ่มที่จะได้ประโยชน์โดยตรงจาก Paris Agreement
ตัวอย่างธุรกิจที่เข้าไปลงทุน เช่น
-Vetas Wind System ผู้นำด้านการพัฒนากังหันลมเพื่อผลิตไฟฟ้าที่สามารถผลิตได้สูงถึง 130 กิกะวัตต์ ใน 82 ประเทศทั่วโลก มีส่วนแบ่งตลาด 20% และมีบริการยาวนานถึง 19 ปี
-Delta Airlines บริษัทสายการบินใหญ่ที่สุดในโลกที่พยายามลดการปล่อยก๊าซคาร์บอนไดออกไซด์ด้วยแผนการลงทุน 1 พันล้านเหรียญสหรัฐในอีก 10 ปี ข้างหน้า
โดยปัจจุบัน กองทุน K-CLIMATE มีผลการดำเนินงานตั้งแต่จัดตั้งกองทุนต่อปี 17.99% ใกล้เคียงดัชนีอ้างอิงที่ 19.25% ต่อปี (ณ 1 เมษายน 2564)
แล้วกองทุน K-CHANGE น่าสนใจอย่างไร ?
กองทุน K-CHANGE มีจุดเด่นที่น่าสนใจ
คือ การลงทุนในบริษัทที่มีอัตราการเติบโตของกำไรสูงพร้อมทั้งสร้างผลกระทบเชิงบวก และช่วยให้โลกเกิดการเปลี่ยนแปลงอย่างยั่งยืนใน 4 ด้านหลัก ได้แก่ โอกาสทางสังคมและการศึกษา การดูแลสุขภาพและคุณภาพชีวิต ความรับผิดชอบต่อสิ่งแวดล้อม และการช่วยเหลือผู้ด้อยโอกาส
โดยมีเกณฑ์พิจารณาคัดเลือกบริษัทที่จะลงทุน
ที่สามารถวัดผลการเปลี่ยนแปลงได้อย่างเป็นรูปธรรม
เช่น ทุกการลงทุน 15 ล้านบาทในปี 2019
- จะช่วยลดการปล่อยก๊าซคาร์บอนไดออกไซด์ ได้ 124 ตัน
- จะช่วยประหยัดน้ำดื่มได้ 2.9 แสนลิตร
ตัวอย่างธุรกิจที่เข้าไปลงทุน เช่น
- ธุรกิจเทคโนโลยีที่มีกระบวนการผลิตเป็นมิตรต่อโลก เช่น Tesla และ TSMC
- ธุรกิจส่งเสริมคุณภาพชีวิตและการวิจัยด้านยารักษาโรค เช่น Moderna และ M3
ที่น่าสนใจคือ K-CHANGE ลงทุนใน Moderna ตั้งแต่ก่อนการแพร่ระบาดของโควิด-19
เพราะเป็นธุรกิจเทคโนโลยีสุขภาพในเมกะเทรนด์ ที่สามารถสร้างความยั่งยืนให้แก่โลกได้
โดยกองทุน K-CHANGE มีผลการดำเนินงานตั้งแต่จัดตั้งกองทุนต่อปีที่ 47.46%
ซึ่งเป็นตัวเลขที่สูงกว่าดัชนีอ้างอิงต่อปีที่ 17.29% (ณ 7 เมษายน 2564)
พูดง่าย ๆ ว่ากองทุน K-CLIMATE และ กองทุน K-CHANGE
เป็นหนึ่งช่องทางสร้าง Long Term Capital Growth
หรือผลตอบแทนที่ดีในระยะยาวได้นั่นเอง
มาถึงตรงนี้ จะเห็นได้ว่า..
เทรนด์ “Sustainability” ไม่ใช่แค่เรื่องของนโยบายระดับประเทศ
แต่ยังเป็นโอกาสสร้างการเติบโตอย่างยั่งยืนให้กับโลกธุรกิจ
แม้วันนี้.. หลาย ๆ อย่างจะยังอยู่ในช่วงเริ่มต้น
แต่การมีเป้าหมายที่ชัดเจน แม้จะใช้ระยะเวลานาน ก็มั่นใจได้ว่า การเดินทางครั้งนี้ จะไม่หลงทาง
เช่นเดียวกับการเลือกลงทุนกับองค์กรมืออาชีพที่ช่วยดูแลการลงทุน ให้เติบโตอย่างมั่นคงและยั่งยืนด้วย “ธุรกิจแห่งความยั่งยืน”
และยังเป็นเทรนด์การลงทุนที่จะสร้าง “ผลตอบแทนระยะยาว” ให้แก่นักลงทุน และ “ความยั่งยืน” ให้แก่โลกไปพร้อมกันนั่นเอง..
สำหรับผู้ที่สนใจลงทุนในธีม Sustainability สามารถศึกษาข้อมูลเพิ่มเติมได้ที่
https://www.kasikornbank.com/th/personal/private-banking/vdo-covid/Pages/KPB-Perspective-EP2.aspx และ https://www.kasikornbank.com/th/personal/private-banking/vdo-covid/Pages/KPB-Perspective-EP3.aspx
ข้อมูลสำคัญสำหรับการลงทุน
- K-CLIMATE ระดับความเสี่ยงกองทุน : ระดับ 6 / ความเสี่ยงจากอัตราแลกเปลี่ยน : การป้องกันความเสี่ยงจากอัตราแลกเปลี่ยนตามดุลยพินิจ
- K-CHANGE ระดับความเสี่ยงกองทุน : ระดับ 6 / ความเสี่ยงจากอัตราแลกเปลี่ยน : การป้องกันความเสี่ยงจากอัตราแลกเปลี่ยนบางส่วน
- โปรดทำความเข้าใจลักษณะสินค้า/เงื่อนไขผลตอบแทน/ความเสี่ยง ก่อนตัดสินใจลงทุน
- ผู้ลงทุนควรขอคำแนะนำเพิ่มเติมจากผู้ประกอบธุรกิจก่อนตัดสินใจลงทุน
References
-https://joebiden.com/climate-plan/
-https://www.bloomberg.com/news/articles/2021-03-05/china-s-new-green-target-still-means-pumping-too-much-pollution
-https://ec.europa.eu/info/strategy/priorities-2019-2024/european-green-deal_en#timeline
-https://greennews.agency/?p=22111
-https://www.lombardodier.com/clic
-https://www.apple.com/environment/
-https://csr.tsmc.com/csr/en/CSR/valueCreation.html
-https://kasikornasset.com/th/mutual-fund/fund-template/Pages/K-CHANGE-A(A).aspx
-https://www.kasikornasset.com/th/mutual-fund/fund-template/Pages/K-CLIMATE.aspx
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「proposal template」的推薦目錄:
- 關於proposal template 在 ลงทุนแมน Facebook 的精選貼文
- 關於proposal template 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於proposal template 在 コバにゃんチャンネル Youtube 的最讚貼文
- 關於proposal template 在 大象中醫 Youtube 的最佳解答
- 關於proposal template 在 大象中醫 Youtube 的最讚貼文
- 關於proposal template 在 390 Proposal Templates ideas - Pinterest 的評價
- 關於proposal template 在 Make a Business Proposal in 10 Minutes (+4 Editable ... 的評價
proposal template 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] Reason Why You Should Use EIP1167 Proxy Contract. (With Tutorial)
✍️ Ping Chen
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
EIP1167 minimal proxy contract is a standardized, gas-efficient way to deploy a bunch of contract clones from a factory.
1. Who may consider using EIP1167
For some DApp that are creating clones of a contract for its users, a “factory pattern” is usually introduced. Users simply interact with the factory to get a copy. For example, Gnosis Multisig Wallet has a factory. So, instead of copy-and-paste the source code to Remix, compile, key in some parameters, and deploy it by yourself, you can just ask the factory to create a wallet for you since the contract code has already been on-chain.
The problem is: we need standalone contract instances for each user, but then we’ll have many copies of the same bytecode on the blockchain, which seems redundant. Take multisig wallet as an example, different multisig wallet instances have separate addresses to receive assets and store the wallet’s owners’ addresses, but they can share the same program logic by referring to the same library. We call them ‘proxy contracts’.
One of the most famous proxy contract users is Uniswap. It also has a factory pattern to create exchanges for each ERC20 tokens. Different from Gnosis Multisig, Uniswap only has one exchange instance that contains full bytecode as the program logic, and the remainders are all proxies. So, when you go to Etherscan to check out the code, you’ll see a short bytecode, which is unlikely an implementation of an exchange.
0x3660006000376110006000366000732157a7894439191e520825fe9399ab8655e0f7085af41558576110006000f3
What it does is blindly relay every incoming transaction to the reference contract 0x2157a7894439191e520825fe9399ab8655e0f708by delegatecall.
Every proxy is a 100% replica of that contract but serving for different tokens.
The length of the creation code of Uniswap exchange implementation is 12468 bytes. A proxy contract, however, has only 46 bytes, which is much more gas efficient. So, if your DApp is in a scenario of creating copies of a contract, no matter for each user, each token, or what else, you may consider using proxy contracts to save gas.
2. Why use EIP1167
According to the proposal, EIP is a “minimal proxy contract”. It is currently the known shortest(in bytecode) and lowest gas consumption overhead implementation of proxy contract. Though most ERCs are protocols or interfaces, EIP1167 is the “best practice” of a proxy contract. It uses some EVM black magic to optimize performance.
EIP1167 not only minimizes length, but it is also literally a “minimal” proxy that does nothing but proxying. It minimizes trust. Unlike other upgradable proxy contracts that rely on the honesty of their administrator (who can change the implementation), address in EIP1167 is hardcoded in bytecode and remain unchangeable.
That brings convenience to the community.
Etherscan automatically displays code for EIP1167 proxies.
When you see an EIP1167 proxy, you can definitely regard it as the contract that it points to. For instance, if Etherscan finds a contract meets the format of EIP1167, and the reference implementation’s code has been published, it will automatically use that code for the proxy contract. Unfortunately, non-standard EIP1167 proxies like Uniswap will not benefit from this kind of network effect.
3. How to upgrade a contract to EIP1167 compatible
*Please read all the steps before use, otherwise there might have problems.
A. Build a clone factory
For Vyper, there’s a function create_with_code_of(address)that creates a proxy and returns its address. For Solidity, you may find a reference implementation here.
function createClone(address target) internal returns (address result){ bytes20 targetBytes = bytes20(target); assembly { let clone := mload(0x40) mstore(clone, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(clone, 0x14), targetBytes) mstore(add(clone, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) result := create(0, clone, 0x37) }}
You can either deploy the implementation contract first or deploy it with the factory’s constructor. I’ll suggest the former, so you can optimize it with higher runs.
contract WalletFactory is CloneFactory { address Template = "0xc0ffee"; function createWallet() external returns (address newWallet) { newWallet = createClone(Template); }}
B. Replace constructor with initializer
When it comes to a contract, there are two kinds of code: creation code and runtime code. Runtime code is the actual business logic stored in the contract’s code slot. Creation code, on the other hand, is runtime code plus an initialization process. When you compile a solidity source code, the output bytecode you get is creation code. And the permanent bytecode you can find on the blockchain is runtime code.
For EIP1167 proxies, we say it ‘clones’ a contract. It actually clones a contract’s runtime code. But if the contract that it is cloning has a constructor, the clone is not 100% precise. So, we need to slightly modify our implementation contract. Replace the constructor with an ‘initializer’, which is part of the permanent code but can only be called once.
// constructorconstructor(address _owner) external { owner = _owner;}// initializerfunction set(address _owner) external { require(owner == address(0)); owner = _owner;}
Mind that initializer is not a constructor, so theoretically it can be called multiple times. You need to maintain the edge case by yourself. Take the code above as an example, when the contract is initialized, the owner must never be set to 0, or anyone can modify it.
C. Don’t assign value outside a function
As mentioned, a creation code contains runtime code and initialization process. A so-called “initialization process” is not only a constructor but also all the variable assignments outside a function. If an EIP1167 proxy points to a contract that assigns value outside a function, it will again have different behavior. We need to remove them.
There are two approaches to solve this problem. The first one is to turn all the variables that need to be assigned to constant. By doing so, they are no longer a variable written in the contract’s storage, but a constant value that hardcoded everywhere it is used.
bytes32 public constant symbol = "4441490000000000000000000000000000000000000000000000000000000000";uint256 public constant decimals = 18;
Second, if you really want to assign a non-constant variable while initializing, then just add it to the initializer.
mapping(address => bool) public isOwner;uint public dailyWithdrawLimit;uint public signaturesRequired;
function set(address[] _owner, uint limit, uint required) external { require(dailyWithdrawLimit == 0 && signaturesRequired == 0); dailyWithdrawLimit = limit; signaturesRequired = required; //DO SOMETHING ELSE}
Our ultimate goal is to eliminate the difference between runtime code and creation code, so EIP1167 proxy can 100% imitate its implementation.
D. Put them all together
A proxy contract pattern splits the deployment process into two. But the factory can combine two steps into one, so users won’t feel different.
contract multisigWallet { //wallet interfaces function set(address[] owners, uint required, uint limit) external;}contract walletFactory is cloneFactory { address constant template = "0xdeadbeef"; function create(address[] owners, uint required, uint limit) external returns (address) { address wallet = createClone(template); multisigWallet(wallet).set(owners, required, limit); return wallet; }}
Since both the factory and the clone/proxy has exactly the same interface, no modification is required for all the existing DApp, webpage, and tools, just enjoy the benefit of proxy contracts!
4. Drawbacks
Though proxy contract can lower the storage fee of deploying multiple clones, it will slightly increase the gas cost of each operation in the future due to the usage of delegatecall. So, if the contract is not so long(in bytes), and you expect it’ll be called millions of times, it’ll eventually be more efficient to not use EIP1167 proxies.
In addition, proxy pattern also introduces a different attack vector to the system. For EIP1167 proxies, trust is minimized since the address they point to is hardcoded in bytecode. But, if the reference contract is not permanent, some problems may happen.
You might ever hear of parity multisig wallet hack. There are multiple proxies(not EIP1167) that refer to the same implementation. However, the wallet has a self-destruct function, which empties both the storage and the code of a contract. Unfortunately, there was a bug in Parity wallet’s access control and someone accidentally gained the ownership of the original implementation. That did not directly steal assets from other parity wallets, but then the hacker deleted the original implementation, making all the remaining wallets a shell without functionality, and lock assets in it forever.
https://cointelegraph.com/news/parity-multisig-wallet-hacked-or-how-come
Conclusion
In brief, the proxy factory pattern helps you to deploy a bunch of contract clones with a considerably lower gas cost. EIP1167 defines a bytecode format standard for minimal proxy and it is supported by Etherscan.
To upgrade a contract to EIP1167 compatible, you have to remove both constructor and variable assignment outside a function. So that runtime code will contain all business logic that proxies may need.
Here’s a use case of EIP1167 proxy contract: create adapters for ERC1155 tokens to support ERC20 interface.
pelith/erc-1155-adapter
References
https://eips.ethereum.org/EIPS/eip-1167
https://blog.openzeppelin.com/on-the-parity-wallet-multisig-hack-405a8c12e8f7/
Donation:
pingchen.eth
0xc1F9BB72216E5ecDc97e248F65E14df1fE46600a
Reason Why You Should Use EIP1167 Proxy Contract. (With Tutorial) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
proposal template 在 390 Proposal Templates ideas - Pinterest 的推薦與評價
Jul 6, 2018 - Explore Lolita Morino's board "Proposal Templates", followed by 3327 people on Pinterest. See more ideas about proposal templates, proposal, ... ... <看更多>