#獨家 世界衛生組織將台灣問題相關聲明稿下架!
世界衛生組織(WHO)在台灣時間今(6)日凌晨以 "How the World Health Organization works with all people, everywhere" 為題發了一篇聲明稿,試圖為排除台灣參與 WHO 辯解。不過這篇聲明卻在不到 24 小時內就被 WHO 網站下架,直至晚間6時30分仍呈現「找不到網頁」(This page cannot be found),《沃草》透過世衛網站暫存紀錄,獨家為大家揭露該篇聲明內容。
聲明中,WHO仍稱與台灣相關的事務為「中國台灣事務」( Taiwan, China issues),針對全球的種種批評,WHO 仍稱之為誤解(misunderstandings),並聲稱是有些人將「技術性的維護全球公共健康任務」與「決定 WHO 會員資格的權限」混淆,似乎打算以此來回應國際要求讓台灣加入 WHO 的呼聲。
聲明中多處重申 WHO 在 3 月 29 日公布的聲明(https://waa.tw/Qsu21N),認為 WHO 與台灣設有聯絡點、台灣專家曾參與 WHO 會議等,並表示台灣參與世界衛生大會的觀察員資格是在一次次的會員國投票中遭到否決,以及提起讓中華人民共和國取代中華民國聯合國席位的聯合國 2758 決議文,表示世界衛生大會遵循此決議及其中的一中原則。
似乎是為回應全球對 WHO 應對流行病能力的質疑,WHO 在聲明中表示「有些人可能認為 WHO 成員組成影響我們維護世界安全的能力,但更重要的是要了解我們的治理方式和實踐方式。」
暫存檔網址:https://waa.tw/dohkIm
聲明截圖:https://drive.google.com/file/d/1VP-KMgP4wb6Oy8jQkOjoSu-DWGS3Xqkb/view
原新聞稿網址:https://waa.tw/lFKd8M
(以下為世界衛生組織聲明原文)
標題:Update: How the World Health Organization works with all people, everywhere
發表時間:5 April 2020 Statement
內文:
In recent months we have seen misunderstandings in social media and the news media about how WHO manages global public health issues. In particular, there are a lot of questions about Taiwan, China issues. Some people are confusing WHO’s technical global public health mandate, with the mandate of countries to determine WHO’s membership. Countries decide this. The WHO Secretariat focuses on keeping the world safe.
WHO works to promote the health of all people, everywhere. Indeed, one of our overarching goals is Universal Health Coverage. #healthforall. We are an organization with a staff of physicians, scientists, researchers and public health experts who are committed to serving all people regardless of nationality, race, ethnicity, religion, gender.
This includes the people of Taiwan. We serve them through regular interactions with their experts and authorities on vital public health issues. This has been the case over many years, including during the COVID-19 pandemic.
It is understandable that some people might think that the composition of WHO’s membership affects our ability to keep the world safe. But it is important to understand both how we are governed and how we operate in practice.
WHO is part of the United Nations, whose membership is the mandate of countries. In 1971, countries of the world participating in the United Nations General Assembly recognized the People’s Republic of China as “the only legitimate representative of China,” in effect, a one-China policy. That is contained in UNGA Resolution 2758. In 1972, the World Health Assembly decided in WHA Resolution 25.1 to follow that.
Every year, members have a chance to discuss important proposals during the World Health Assembly, where rules and policies governing WHO are decided. For example, at different times, some countries have proposed giving Taiwan’s authorities a special status – that of observing the annual World Health Assembly.
There have been 14 times over the last 22 years (1997-2006; and in 2008, 2017, 2018, 2019) when countries discussed whether a delegation from Taiwan could attend the World Health Assembly as an observer. Each time the countries decided against it by consensus – except in 1997 and 2004 when there were votes: (by 128 votes to 19 in 1997; and by 133 votes to 25 in 2004). In 2007, the issue wasn’t observer status, but membership, and countries decided against considering that by a vote of 148 to 17.
There have been occasions when it was clear that there was general support among WHO countries for Taiwan to take an observer seat at the World Health Assembly. Between 2009 and 2016, it did so under the name “Chinese Taipei.”
But having a seat at the WHA, or not having a seat at the WHA, does not affect, in any way, whether an area or population benefits from WHO expertise and guidance. WHO helps all people, everywhere.
WHO and Taiwan’s health experts interact throughout the year on vital public health and scientific issues, according to well-established arrangements.
During the current COVID-19 pandemic, interactions have been stepped up, both through existing channels and new ones as well.
Here are examples of WHO-Taiwan interactions around the coronavirus pandemic:
-- There is an established International Health Regulations (IHR) Point of Contact (POC) for Taiwan. Taiwan’s POC receives IHR (2005) communications, provides IHR information updates from Taiwan directly to WHO Headquarters, and has access to the IHR Event Information Site (EIS) system. The EIS system is a password-protected database and information exchange platform supporting the IHR. It is the well-established platform for all IHR communications, back and forth, between WHO and IHR contacts.
-- Health experts from Taiwan participate in two of the key WHO networks set up in January 2020 to support WHO work in the global COVID-19 response. Three experts from Taiwan are part of the WHO Infection Prevention and Control Network: two are part of the WHO Clinical Network. Every week, they join some 60 to 80 other experts from around the globe through a WHO-hosted teleconference, working to advance our knowledge and guidance in this response.
-- Two public health experts from Taiwan participated in the Global Research and Innovation Forum organized by WHO on 11-12 February 2020. They took part, alongside other world scientists, in considering critical research questions and in finding ways to work together to advance the response.
-- Taiwan’s Field Epidemiology Training Program is a member of the Training Programs in Epidemiology and Public Health Interventions Network (also known as “TEPHINET”). WHO shares Global Outbreak Alert and Response Network alerts and requests for assistance with TEPHINET, and those messages are cascaded to the TEPHINET members.
-- WHO, through its technical lead, has directly briefed health authorities from Taiwan and has offered again.
--Taiwan’s health experts and authorities have open access to developments, guidance and other materials through the WHO’s website (www.who.int) and other digital platforms.
--They can access the www.OpenWHO.org platform, which hosts open online courses for decisionmakers and responders around the world. During the COVID-19 pandemic, OpenWHO usage has reached more than 1 million.
--WHO has a designated contact point with their office in Geneva. Through this channel, general questions are handled and when technical concerns arise, WHO technical responses are coordinated.
--WHO also interacts with Taiwan’s health authorities through the European Centre for Disease Prevention and Control.
Importantly, the COVID-19 caseload in Taiwan is low relative to population. We continue to follow developments closely, and WHO is taking lessons learned from all areas.
Interactions with Taiwan during the response to the pandemic is not exceptional. Here are some examples of regular interactions with Taiwan’s health authorities and WHO, over many years, through well-established arrangements, and across many different global health concerns:
Over the course of 2019, Taiwan’s experts were invited to attend 9 WHO technical meetings. They attended 8 of these meetings, contributing to WHO expert processes on issues including immunization, drug-resistant TB, assistive technologies, vaccine safety and SDG targets on NCDs and Mental Health. Prior to the Covid-19 emergency, work was underway for more expert participation from Taiwan in 2020.
On influenza, Taiwan vaccine manufacturer Adimmune contributes to the WHO Pandemic Influenza Preparedness Framework (PIP Framework) and preparations are underway for concluding an agreement between WHO and Adimmune under the PIP Framework for pandemic influenza vaccine products;
In the fight against cancer, experts from Taiwan have contributed to key publications issued by the WHO International Agency for Research on Cancer;
In support of the International Health Regulations, an expert from Taiwan has been appointed to the IHR Expert Roster; and
On a range of other issues, from WHO pre-qualification practices for pharmaceutical manufacturers to malaria, there are exchanges with WHO on practical and technical issues.
It is fair to say that the contribution of Taiwan’s health experts to WHO, and their interactions with us, are well-developed and broad-based. And these interactions add value to the work of WHO and to global health.
example of network effect 在 AppWorks Facebook 的最讚貼文
[Founders Who Want to Learn About the Marketing of Sharing on Social Channels]
If a founder feels marketing and content development is critical for startup success, what does your team need to be good at?
I read advice from marketing people about how to do marketing online. In a startup, I think a lot of this advice isn't relevant, because it assumes that founders have a product and a market fit, and that all they have to do is:
1. Have a message
2. Pay for distribution of this message.
In my opinion, this is useless. This assumes that you have a long history of owned media and a long history of product development.
As an early stage founder, you do not have these things. I would bet on it.
In early product development, your product development and your community development are interconnected.
Your product evolves and your community grows, if you are able to feed that community with content that enables them to give you feedback on your mission, your product and your goals.
Marketing, in this case, has a very different methodology than "paid advertising" or "content distribution."
Marketing in this case is more like sharing and linking to people, building a network. It is best done in social media channels, which are inherently bi-directional, interactive, and identity-focused.
In my opinion, the two things you should be helping your team achieve in this "marketing-as-a-sharing" activity are:
1. Finding ambassadors for your cause, and people who support your mission
2. Audience members who find your content compelling and can work as carriers of your content into other social channels
I keep this generally as two things, so that it's easier to group these ideas into general categories of action:
1. Talking to people and sharing with them ideas and their own stories and yours
2. Creating compelling content
If you can do these two things in social media, you can achieve:
1. Demographic, personality, and behavioral data about your community / customers
2. An increasingly expanding customer and audience base that builds these data in a network effect.
So, how do you do it?
Here are just three tips that will help you:
1. Learn to interview your audience, and write about them and link to them in your channels
2. Learn to take photos of your community and customers and post those pics on your social channels and link to them
3. Learn to look through data and figure out where and who is consuming that data so that you are able to push more content to those people, or find blank spots and blue ocean areas to develop more content.
Here is one example we did recently.
In LinkedIn, we posted updates about our experience with Techstars Startup Week in Taipei, and we tagged all the wonderful founders and people we met. We made sure to tag Alyssa Chen as one of the speakers.
That post is here: https://www.linkedin.com/feed/update/urn:li:activity:6609976124141338624
This sharing did two things. It showed our respect and our belief in the strength of their founder community and the Taiwan community, and it also helped share our audience (and our audience's views of the market) with them so that they could learn more about us.
This same activity can happen in your own channels. Over time, it leads to reputation building and information sharing. It also grows the whole pie for everyone.
After all, being a founder is about being part of a community of people who help each other, share with each other and support each other through almost anything.
I will continue these tips in next week's post by using specific examples of how this can be done, so stay tuned.
For now, keep following us on Facebook, join us on LinkedIn, and check out our accelerator content on our web page.
Our Accelerator blog page: https:appworks.tw/blog
Our LinkedIn Page: https://www.linkedin.com/company/appworks-ventures
We will be launching the application period for AI and Blockchain founders in our next Accelerator class very soon. Make sure to check it out. https://appworks.tw/accelerator
Doug Crets
Communications Master, AppWorks
Photo Credit: Perry Grone on Unsplash
example of network effect 在 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.
👏 歡迎轉載分享鼓掌