📜 [專欄新文章] Optimistic Rollup 就這樣用(2)
✍️ Juin Chiu
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
ERC721 的儲值、轉移與提領
TL;DR
本文會跳過 Optimistic Rollup 的介紹而直接實際演示,關於 Optimistic Rollup 的概念與設計原理筆者將在日後另撰文說明,有興趣的讀者可以先參考下列三篇文章(由淺入深):1. OVM Deep Dive 2. (Almost) Everything you need to know about Optimistic Rollup 3. How does Optimism’s Rollup really work?
本文將演示一個 Optimism Rollup 的 ERC721 範例,程式碼在這裡。
本演示大量參考了以下範例:Optimistic Rollup Example: ERC20。
本演示所使用的 ERC721 Gateway 合約來自這個提案,目前尚未成為官方標準。
環境設置
Git
Node.js
Yarn
Docker
Docker-compose
筆者沒有碰到環境相容問題,但是建議都升到最新版本, Node.js 使用 v16.1.0 或以上版本
Optimism 服務啟動
有關 Optimisim 的所有服務,都包裝在 Optimism 這個超大專案當中了,直接使用原始碼進行組建:
$ git clone git@github.com:ethereum-optimism/optimism.git$ cd optimism$ yarn$ yarn build
組建完成後,就可以在本機啟動服務了:
$ cd ops$ docker-compose build$ docker-compose up
這個指令會啟動數個服務,包括:
L1 Ethereum Node (EVM)
L2 Ethereum Node (OVM)
Batch Submitter
Data Transport Layer
Deployer
Relayer
Verifier
Deployer 服務中的一個參數要特別注意: FRAUD_PROOF_WINDOW_SECONDS,這個就是 OPtimistic Rollup 的挑戰期,代表使用者出金(Withdraw)需等候的時長。在本篇演示中預設為 0 秒。
如果有需要重啟,記得把整個 Docker Volume 也清乾淨,例如: docker-compose down -v
Optimism 整合測試
在繼續接下來的演示之前,我們需要先確認 Optimism 是否有順利啟動,特別是 Relayer 是否運作正常,因此我們需要先進行整合測試:
$ cd optimism/integration-tests$ yarn build:integration$ yarn test:integration
確保 L1 <--> L2 Communication 相關測試通過後再繼續執行接下來的演示內容。
啟動服務及部署合約需要花費一些時間,運行一段時間(約 120 秒)之後再執行測試,如果測試結果全部皆為 Fail,可能是 Optimism 尚未啟動完成,再等待一段時間即可。
ERC721 合約部署
Optimism 啟動成功並且完成整合測試後,接下來進行 ERC721 合約的部署。筆者已將合約及部署腳本放在 optimistic-rollup-example-erc721 這個專案中:
$ git clone git@github.com:ethereum-optimism/optimistic-rollup-example-erc721.git$ cd optimistic-rollup-example-erc721$ yarn install$ yarn compile
接下來我們需要部署以下合約:
ERC721,部署於 L1
L2DepositedEERC721,部署於 L2
OVM_L1ERC721Gateway,部署於 L1
OVM_L1ERC721Gateway 只部署在 L1 上,顧名思義它就是 L1 <=> L2 的「門戶」,提供 Deposit / Withdraw 兩個基本功能,使用者必須透過這個合約來進出 L2。
雖然 OVM_L1ERC20Gateway 是 Optimistic Rollup 官方提供的合約。但是開發者也可以依需求自行設計自己的「門戶」。
OVM_L1ERC20Gateway 目前沒有 Optimism 的官方實作,本演示所使用的 ERC721 Gateway 合約來自這個提案,目前尚未成為官方標準。
接下來,我們直接用腳本進行部署:
$ node ./deploy.jsDeploying L1 ERC721...L1 ERC2721 Contract Address: 0xFD471836031dc5108809D173A067e8486B9047A3Deploying L2 ERC721...L2 ERC721 Contract Address: 0x09635F643e140090A9A8Dcd712eD6285858ceBefDeploying L1 ERC721 Gateway...L1 ERC721 Gateway Contract Address: 0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547ccInitializing L2 ERC721...
ERC721 鑄造、儲值、轉移與提領
鑄造(L1)
初始狀態如下,所有帳戶皆尚未持有任何代幣:
接下來,我們將鑄造 2 個代幣以進行接下來的演示。首先,進入 ETH(L1) 的 Console:
$ npx hardhat console --network ethWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat ETH Console
> let accounts = await ethers.getSigners()
> let deployer = accounts[0]
> let user = accounts[1]
取得 ERC721 及 OVM_L1ERC721Gateway 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat ETH Console
> let ERC721_abi = await artifacts.readArtifact("ExampleToken").then(c => c.abi)
> let ERC721 = new ethers.Contract("0xFD471836031dc5108809D173A067e8486B9047A3", ERC721_abi)
> let Gateway_abi = await artifacts.readArtifact("OVM_L1ERC721Gateway").then(c => c.abi)
> let Gateway = new ethers.Contract("0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc", Gateway_abi)
鑄造兩個 ERC721 代幣:
// In Hardhat ETH Console
> await ERC721.connect(deployer).mintToken(deployer.address, "foo")
{ hash: "...", ...}
> await ERC721.connect(deployer).mintToken(deployer.address, "bar")
{ hash: "...", ...}
只有合約的 Owner(deployer) 可以進行鑄造的操作。
確認 Deployer 餘額:
> await ERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x02', _isBigNumber: true } // 2
確認代幣的 TokenID 與 Owner:
> await ERC721.connect(deployer).ownerOf(1)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
> await ERC721.connect(deployer).ownerOf(2)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
儲值(L1 => L2)
完成以上步驟後,目前的狀態如下:
接下來,授權 OVM_L1ERC721Gateway使用 TokenID 為 2 的代幣:
// In Hardhat ETH Console
> await ERC721.connect(deployer).approve("0xcbEAF3BDe82155F56486Fb5a1072cb8baAf547cc", 2)
{ hash: "...", ...}
在 OVM_L1ERC721Gateway 合約呼叫 Deposit,儲值 TokenID 為 2 的代幣:
// In Hardhat ETH Console
> await Gateway.connect(deployer).deposit(2)
{ hash: "...", ...}
我們可以到 Optimism (L2) 的 Console 確認入金是否成功:
$ npx hardhat console --network optimismWelcome to Node.js v16.1.0.Type ".help" for more information.>
取得 Deployer / User 帳戶:
// In Hardhat Optimism Console
> let accounts = await ethers.getSigners()
> let deployer = accounts[0]
> let user = accounts[1]
取得 L2DepositedERC721 合約物件,合約地址可以從部署訊息中取得:
// In Hardhat Optimism Console
> let L2ERC721_abi = await artifacts.readArtifact("OVM_L2DepositedERC721").then(c => c.abi)
> let L2DepositedERC721 = new ethers.Contract("0x09635F643e140090A9A8Dcd712eD6285858ceBef", L2ERC721_abi)
確認入金是否成功:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await L2DepositedERC721.connect(deployer).ownerOf(2)
'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266' // deployer
ERC721 轉移(L2 <=> L2)
完成以上步驟後,目前的狀態如下:
接下來,我們在 L2 從 Deployer 轉移代幣給 User:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x00', _isBigNumber: true } // 0
> await L2DepositedERC721.connect(deployer).transferFrom(depoyer.address, user.address, 2)
{ hash: "..." ...}
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await L2DepositedERC721.connect(user).ownerOf(2)
'0x70997970C51812dc3A010C7d01b50e0d17dc79C8' // user
ERC721 提領(L2 => L1)
完成以上步驟後,目前的狀態如下:
接下來,我們用 User 帳戶提領資金,在 L2DepositedERC721 合約呼叫 Withdraw:
// In Hardhat Optimism Console
> await L2DepositedERC721.connect(user).withdraw(2)
{ hash: "..." ...}
> await L2DepositedERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x00', _isBigNumber: true }
最後,檢查在 L1 是否提領成功:
// In Hardhat ETH Console
> await ERC721.connect(user).balanceOf(user.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await ERC721.connect(deployer).balanceOf(deployer.address)
BigNumber { _hex: '0x01', _isBigNumber: true } // 1
> await ERC721.connect(user).ownerOf(2)
'0x70997970C51812dc3A010C7d01b50e0d17dc79C8' // user
由於挑戰期為 0 秒,因此提領幾乎無需等待時間,頂多只需數秒鐘
做完上述所有操作,最終狀態應該如下:
總結
本文演示了:
Optimistic Rollup 相關服務的本機部署
ERC721 L1 => L2 的儲值(Deposit)
ERC721 L2 帳戶之間轉移(Transfer)
ERC721 L2 => L1 的提領(Withdraw)
筆者未來將繼續擴充此系列的教學內容,例如支援其他標準的合約如 ERC1155,以及如何運行 Optimistic Rollup 生態系中最重要的驗證者(Verifier),敬請期待。
參考資料
OVM Deep Dive
(Almost) Everything you need to know about Optimistic Rollup
How does Optimism’s Rollup really work?
Optimistic Rollup Official Documentation
Ethers Documentation (v5)
Optimistic Rollup Example: ERC20(Github)
Optimism (Github)
optimism-tutorial (Github)
l1-l2-deposit-withdrawal (Github)
Proof-of-concept ERC721 Bridge Implementation (Github)
Optimistic Rollup 就這樣用(2) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有2部Youtube影片,追蹤數超過15萬的網紅pennyccw,也在其Youtube影片中提到,Allen Iverson wasn't trying to take over the game down the stretch. It just happened -- like it typically does for him. Iverson scored 38 points...
type of contract 在 CheckCheckCin Facebook 的最佳貼文
【鼻敏感發作】鼻水長流如開水喉
⭐辛夷花又名木筆花
⭐狀似毛筆筆頭
#星期四食材
辛夷花打救鼻敏感
鼻敏感突然發作,連環打了十多個噴嚏,不但鼻子擦到發紅,連眼睛也痕癢紅腫起來。有人選擇服用抗組織胺藥物紓緩症狀,不過藥物可能會令人昏昏欲睡,或者出現口乾、便秘等副作用。從中醫角度會建議服用屬於木蘭科植物的辛夷花,有祛風邪、通鼻竅的功效,有助紓緩鼻炎、感冒產生的鼻涕及鼻塞問題,配搭適合的食材,偏寒偏熱體質也可使用。惟注意辛夷花會促進子宮收縮,懷孕婦女不宜服用。
鼻敏感(寒):辛夷花紫蘇葉薑茶
症狀:打噴嚏、鼻塞流鼻水
材料:辛夷花4朵、紫蘇葉2片、生薑4片、紅糖適量
做法:生薑去皮切片,用刀背拍打一下;辛夷花稍微拍扁,與紫蘇葉及生薑放入保溫瓶,以沸水沖洗一遍倒掉,再注入沸水焗10分鐘,加入紅糖拌勻即可。此茶能反覆沖泡至味淡,建議於鼻敏感發作期間飲用,亦可以一星期連續喝3天為一個療程。
鼻敏感(熱):辛夷花薄荷茶
症狀:打噴嚏、眼乾、流黃稠鼻涕
材料:辛夷花4朵、菊花3朵、薄荷葉3-6片
做法:將辛夷花稍微拍扁與薄荷葉一同放入保溫瓶,以沸水沖洗一遍倒掉,再注入沸水,焗5至10分鐘即可。此茶能反覆沖泡至味淡,建議於鼻敏感發作期間飲用,亦可以一星期連續喝3天為一個療程。
辛夷花 — 性溫,有祛風邪、通鼻竅的功效,適合風寒感冒、鼻塞不通、流清鼻涕、頭風頭痛、急性及慢性鼻炎人士食用。氣虛及陰虛火旺者不宜食用。辛夷花會促進子宮收縮,懷孕婦女不宜服用。
留言或按讚👍🏻支持一下我們吧!❤️ 歡迎 Follow 我們獲得更多養生資訊。
Relieve nasal allergies with biond magnolia flower
When nasal allergies develop, we easily sneeze more than ten times and resort to rubbing our noses until they turn red. At the same time, our eyes become red, swell, and itch. Some would choose to take antihistamine to relieve the allergies, but the medicine can cause drowsiness, dry mouth, and constipation.
Chinese physicians would recommend taking biond magnolia flowers. It is a type of bud from the Magnoliaceae family that can relieve a stuffy and runny nose, nasal inflammation, and flu. Individuals with a heat-related body constitution can also consume it with other ingredients. However, blond magnolia flowers can cause uterine contraction. Hence, it is not suitable for pregnant women to consume.
Nasal allergies (cold): biond magnolia flowers and purple perilla ginger tea
Symptoms: sneezing, stuffy and runny nose
Ingredients: 4 biond magnolia flowers, 2 purple perilla, 4 raw ginger slices, brown sugar to taste
Preparations: Peel and cut raw gingers into slices. Slightly pound it with the back of the knife.
Slightly pound the blond magnolia flowers and place into a thermos with the purple perilla and ginger, rinse everything once with boiling water and then remove the water. Add in boiling water again and steep for 10 minutes. Add brown sugar to taste. The tea can be re-brewed until flavour weakens. For best results, drink continuously when symptoms flare up or drink it consecutively for three days within a week as a treatment course.
Nasal allergies (heat): biond magnolia flowers and mint tea
Symptoms: sneezing, dry eyes, thick and yellow nasal mucus
Ingredients: 4 blond magnolia flowers, 3 chrysanthemum, 3-6 mint leaves
Preparations: Slightly pound the blond magnolia flowers and place into a thermos with the mint leaves, rinse everything once with boiling water and then remove the water. Add in boiling water again and steep for 5-10 minutes. The tea can be re-brewed until flavour weakens. For best results, drink continuously when symptoms flare up or drink it consecutively for three days within a week as a treatment course.
Biond magnolia flowers – warm in nature, can dispel wind and relieve a stuffy nose. It is suitable for individuals who have caught a cold, has a stuffy and runny nose, as well as those experiencing dizziness and headache and both chronic and acute rhinitis.
It is not suitable for people with weak qi and yin and those with a heat-related body constitution. Since Flos magnoliae could cause the uterus to contract, it is not suitable for pregnant women to consume.
Comment below or like 👍🏻 this post to support us. ❤️ Follow us for more healthy living tips.
#男 #女 #我狀態OK #感冒 #頭痛 #喉嚨痛
type of contract 在 Eric's English Lounge Facebook 的最讚貼文
[翻轉視界] 孤軍奮戰的正義律師: 羅伯‧比洛特
Have you seen the film Dark Waters?
你看過電影《黑水風暴》嗎?
The film is based on the 2016 New York Times Magazine article "The Lawyer Who Became DuPont's Worst Nightmare," which describes Robert Bilott's case against the chemical manufacturing corporation DuPont after they contaminated a town with unregulated chemicals.
這部電影改編自紐約時報2016年的文章《成為杜邦最糟糕的噩夢的律師》,講述律師羅伯‧比洛特對抗化學製造廠「杜邦」的故事,該廠以未被規範的化學物質污染了一個小鎮。
Robert Bilott put his career, his family, everything on the line to win justice for tens of thousands if not millions of people. It is because of people like him, people who continue to speak out and take action against injustice, that our society continues to improve. Thank you, Mr. Bilott.
羅伯‧比洛特壓上一切,包括自己的事業、家庭,與為數達到萬人、甚至數百萬的民眾捍衛正義。正因有像他這樣的人持續為對抗不公不義發聲與採取行動,我們的社會才能不斷進步。謝謝你,比洛特先生。
Here’s a Times article that describes both the film and its portray of Mr. Bilott’s struggle to bring justice. I highly recommend the film.
以下是《Time 時代雜誌》的文章,介紹了這部電影並描繪了比洛特先生伸張正義所做的努力;我強烈推薦《黑水風暴》。
新聞報導: https://youtu.be/Tkkuil-U6qQ
★★★★★★★★★★★★
Rob Bilott, a corporate lawyer-turned-environmental crusader, doesn’t much care if he’s made enemies over the years. "I’ve been dealing with this for almost three decades," he says. "I can’t really worry about if the people on the other side like me or not."
•a corporate lawyer 企業律師
•environmental crusader 環境鬥士
•make enemies 樹敵、建立敵人
羅伯‧比洛特是位由企業律師轉變而成的環境鬥士,對自己多年來是否樹敵並不在意。「我已處理這問題近三十年了,」他說,「我根本不在意立場相對的人是否喜歡我」。
★★★★★★★★★★★★
Bilott used to be on the other side. The Todd Haynes-directed movie Dark Waters, tells the story of how the lawyer switched allegiances. As happened in real life, the movie depicts Ruffalo’s Bilott as a lawyer who defends large chemical companies before he is approached for help in 1998 by Wilbur Tennant, a West Virginia farmer whose land was contaminated by chemical giant DuPont. Inflamed by that injustice, and the complicity of local authorities, the lawyer risks his career as he embarks on a decades-long legal siege of one of America’s most powerful corporations.
•switch allegiances 轉換陣營
•depict 描述
•complicity 共謀;串通;共犯
•DuPont 杜邦(世界排名第二大的美國化工公司)
比洛特曾站在企業那一邊。由陶德·海恩斯導演的《黑水風暴》講述這位律師如何轉換陣營:正如真實生活中發生的,該電影描述馬克·魯法洛所扮演的比洛特是一名任職大型化學企業的律師。1998年,一位土地被化學製造巨頭杜邦所污染的西維吉尼亞州農民威爾伯·坦納特,向他尋求幫助。不公義及地方當局的共謀激怒了這名律師;冒著斷送職涯的風險,他開始對美國最有權力的公司之一杜邦,進行長達數十年的法律圍攻。
★★★★★★★★★★★★
He works, at first, on Tennant’s behalf, then pursues a class action suit representing around 70,000 people living near a chemical plant that allegedly contaminated drinking water with PFOA, a toxic chemical used in the production of Teflon. In recent years, studies have correlated long-term exposure to PFOA with a number of illnesses, including some types of cancer.
•on behalf of sb/in behalf of sb; on sb's behalf/in sb's behalf 代表~;作為~的代表;代替~ ; 因為,為了~的利益
•a chemical plant 化學工廠
•allegedly 宣稱地;據傳地
•contaminate drinking water 污染飲用水
•perfluorooctanoic acid (PFOA) 全氟辛酸銨
他一開始先代表威爾伯·坦納特進行訴訟,之後代表約七萬名居住在化學工廠附近的居民進行訴訟,據稱該工廠以全氟辛酸(PFOA)污染了飲用水。PFOA是一種用於製造鐵氟龍的有毒化學物質;近幾年有研究表明,長期暴露於PFOA與許多疾病相關,其中包括某些癌症。
★★★★★★★★★★★★
In 2017, Bilott won a $671 million settlement on behalf of more than 3,500 plaintiffs. Those people claimed they had contracted diseases, among them kidney cancer and testicular cancer, from chemicals DuPont allegedly knew may have been dangerous for decades, and allowed to contaminate their drinking water anyway.
•settlement 協議;和解(金);定居;支付
•plaintiff 原告
•contract a disease 患病、染病
•kidney cancer 腎臟癌
2017年,比洛特代表超過3500名原告贏得了6.71億美金的和解金。這些原告聲稱他們患病,其中包括腎臟癌與睪丸癌,是由於那些杜邦疑似早在數十年前就知道危險、卻仍然放任污染飲用水的化學物質。
★★★★★★★★★★★★
In Dark Waters, Haynes emphasizes the seemingly endless fight taken up by Bilott, as DuPont brings its considerable resources to bear to defend itself over the course of two decades. According to one analyst, the film’s potential to raise awareness about these issues could have a serious effect on some chemical companies’ bottom lines. But for the real Rob Bilott, the work of taking the industry to court is far from over. In October 2018, the lawyer filed a new lawsuit against several companies, including 3M, Arkema, and Chemours, a manufacturer spun off from DuPont in 2015. That ongoing case is seeking class action status, and was initially brought on behalf of Kevin Hardwick, a firefighting veteran of 40 years who used fire-suppression foams and firefighting equipment containing a class of chemicals known as PFAS, or polyfluoroalkyl substances (PFOA is one type of PFAS chemical).
•seemingly endless fight 看似永無止境的鬥爭
•considerable resources 為數可觀、相當多的資源
•raise awareness about… 激發對~的警覺
•far from over 遠遠不夠
•file a lawsuit 提起新訴訟
•seek class action status 尋求集體訴訟(派一方代表訴訟)地位
•polyfluoroalkyl substances (PFAS) 全氟烷基物質(廣泛被用來作為表面塗料,不易分解、會產生污染)
在《黑水風暴》中,海恩斯強調那些比洛特所參與的看似是個永無止盡的鬥爭,因為杜邦二十多年來動用可觀的資源來為自身辯護。根據一位分析師,本電影可能激發大眾對此類議題的警覺,或是將對一些化學公司的利潤帶來嚴重影響。但對真正的羅伯‧比洛特而言,僅將杜邦送上法庭遠遠不夠。2018年10月,這位律師針對好幾家公司提起新訴訟,對象包括3M、阿科瑪與2015年從杜邦拆分出來的製造公司科慕。這起進行中的訴訟案正尋求集體訴訟地位,而該案件初始是為凱文.哈德沃克提起的,一位有40年經驗的消防員,他長期使用一種含全氟烷基物質(PFAS)或多氟烷基(polyfluoroalkyl)物質的滅火泡沫與消防器材。(註:PFOA是一種 PFAS化學物。)
★★★★★★★★★★★★
PFAS chemicals are used in products ranging from waterproof jackets to shaving cream, and they can leach into water supplies in areas where they are disposed of or used in fire suppression (in particular on military bases, where they have been used for years). According to Bilott’s complaint, studies currently suggest that PFAS is present in the blood of around 99% of Americans. The class of chemicals has broadly been linked to immune system disruption, while PFOA specifically has been found to be associated with cancers and other diseases. Bilott’s newest lawsuit, as with his prior cases, alleges that these companies knew for decades that PFAS chemicals, specifically PFOA, could be linked to serious health problems, and that they still assured the Environmental Protection Agency (EPA) and other U.S. government regulators that PFAS exposures were harmless.
•range from…to… 從~到~
•leach into 過濾、滲入
•water supply 供水,給水
•be linked to 與~有關
•be associated with 與~相關
•assure 保證
•government regulators 政府監管、立法單位
•exposure (n.) 暴露
PFAS化學物質應用廣泛,從防水夾克到刮鬍泡,而他們可以滲入可能或被用於滅火的地區的供水之中(尤其在軍中,這種物質被使用多年)。據比洛特控訴,目前研究顯示,約99%的美國人血液中有PFAS存在。這種化學物質與免疫系統遭破壞有關,而PFOA則被發現跟癌症與其他疾病相關。比洛特最新的訴訟一如先前的案件,宣稱這些公司數十年來都知道PFAS化學物質,尤其是PFOA可能與重大健康問題相關,但他們仍舊向環保局與其他美國政府監管單位保證,說 PFAS的暴露是無害的。
★★★★★★★★★★★★
"What we’re hearing once again from those companies that put those chemicals out there, knowing that they would get into the environment and into our blood, is that there’s insufficient evidence to show that they present risks to humans who are exposed," explains Bilott. "These companies are going to sit back and say, we’re entitled to…use you as guinea pigs, yet those of you who are exposed are somehow the ones who are going to have to prove what these 'chemicals' do to you."
•insufficient evidence 證據不足
•present risks 存在危險
•a guinea pig(通常用於測試藥效的)實驗對象,供做實驗的人 ; 豚鼠,天竺鼠
「我們又再次耳聞這些公司,明知那些化學製品會流入環境並進入我們的血液,卻仍將其暴露在環境裡,並宣稱沒有足夠證據證明暴露的化學物質將置人類於風險之中,」比洛特解釋道,「這些公司坐視不理並說,他們有權將人們當成實驗對象,而你們這些暴露在化學物質中的人,卻將證實那些化學物質會對造成什麼影響。」
★★★★★★★★★★★★
"If we can’t get where we need to go to protect people through our regulatory channels, through our legislative process, then unfortunately what we have left is our legal process," says Bilott. "If that’s what it takes to get people the information they need and to protect people, we’re willing to do it."
•regulatory channels 管制途徑
•legislative process 立法程序
「如果我們無法透過管制途徑、立法程序來保護人們,那麼不幸的是,我們只剩下法律程序,」比洛特表示,「如果這就是讓人們得到所需要的資訊、保護人們所要付出的努力,我們願意這樣做。」
★★★★★★★★★★★★
Robert Bilott is a true hero.
羅伯‧比洛特是真正的英雄。
文章來自於《Time 時代雜誌》 : https://time.com/5737451/dark-waters-true-story-rob-bilott/
圖片出處: Cincinnati Enquirer
★★★★★★★★★★★★
翻轉視界: http://bit.ly/3fPvKUs
type of contract 在 pennyccw Youtube 的最佳解答
Allen Iverson wasn't trying to take over the game down the stretch.
It just happened -- like it typically does for him.
Iverson scored 38 points, including two big jumpers in the final two minutes, and Carmelo Anthony added 30, helping the Denver Nuggets hold on for a 110-104 victory over the Los Angeles Clippers on Friday night.
"My whole thing was not so much taking over, but just trying to win the basketball game," he said. "I got a couple of good looks at the end."
Iverson put the Nuggets ahead for good with an 18-foot, off-balance floater with 1:23 remaining. Anthony sealed the Nuggets' second straight win with a critical rebound and putback with 43 seconds left.
Anthony's work on the boards earned glowing praise from Iverson after the game. He finished with 14 rebounds, two shy of his career high.
"When he puts his mind to it, he can do anything on the basketball court," Iverson said. "He can dominate in every aspect. Rebounding, that's all effort. When Melo gets down low and starts banging with those guys, it's hard for people to defend him."
Anthony credited his aggressive play on the boards to simply wanting to take the pressure off Marcus Camby and Kenyon Martin.
"I know I can do it," he said. "I know when I want to do it, and when I do it, nobody can stop me."
He'll receive no arguments from Denver coach George Karl. He wouldn't mind seeing that type of rebounding performance from Anthony all the time.
"He won tonight with rebounding," said Karl, who picked up his 864th victory, tying him with Jack Ramsay for 10th place on the career coaching list. "The rebound and putback were great."
The Clippers, down by as many as 13 points in the second half, momentarily took the lead on two free throws by Corey Maggette with 2:17 left.
However, Iverson worked his way free and hit a jumper to tie it at 104. On the next trip, he gave Denver a lead it wouldn't relinquish.
"My shot felt good from the beginning of the game until the end," Iverson said.
The Nuggets were coming off a 138-96 rout of Seattle in which they shot a franchise-record 67 percent from the floor. Denver couldn't keep up the blistering pace, shooting 45 percent against Los Angeles.
Camby had 12 points and 17 rebounds, his 23rd double-double of the season, and Martin added 13 points.
Al Thornton came off the bench to tie a career high with 33 points and set a new high in rebounds with 12. Maggette added 28 points, while Brevin Knight had a season-high 12 assists as the Clippers dropped their fourth straight game.
"We're playing as hard as we can, but unfortunately they have two All-Stars over there that finished the game off," Clippers coach Mike Dunleavy said. "Iverson made some great shots, made some great plays down the stretch and our guys did the best that they could."
Maggette couldn't fault with his team's play. He just wishes the Clippers weren't so banged up.
"We played them hard with what we got going on," he said.
The Clippers were without big man Chris Kaman, who missed his fourth straight game with a sore lower back.
They also waived popular point guard Sam Cassell on Thursday, opening the door for him to sign with a contender such as the Boston Celtics.
"Sam meant a lot to this team," Maggette said. "He brought leadership, he brought us together. We understand. It's a business."
Game notes
Clippers forward Nick Fazekas played high school hoops close by in a suburb of Denver. Fazekas, who signed a 10-day contract with the team on Feb. 25, played more than four minutes, but didn't score. ... Clippers forward Elton Brand is traveling with the team as he rehabilitates his ruptured left Achilles' tendon. Brand was hurt at the team's practice facility in August. "He's not back, but he's moving in the right direction," Dunleavy said before the game. ... Denver is 2-4 on Feb. 29 since joining the NBA. ... The Nuggets were 2-0 against Los Angeles at the Pepsi Center this season, their first home sweep of the Clippers since 2000-01. ... Clippers F Tim Thomas strained his left groin late in the game and didn't return.
type of contract 在 pennyccw Youtube 的最佳貼文
A.I. and the 76ers went home losers again.
"It's going to have to be one of the best games ever from us in order to win," Allen Iverson said.
They sure didn't play one against Detroit.
Rodney Stuckey scored 27 points and hit the winner with 8.7 seconds left to lead the injury-plagued Pistons to a 90-86 win over Philadelphia on Wednesday night, the 76ers' 11th straight loss.
New Jersey and Minnesota are the only teams with worse records than the Sixers. The Sixers haven't won since Nov. 18 vs. Charlotte and they've lost by five or less points six times during the skid.
Stuckey had the ball stripped by Andre Iguodala, but he grabbed the loose ball and tossed it in for the go-ahead basket with 1 second left on the shot clock.
Iguodala went for the win, but his open 3-point attempt was no good. He scored 18 points.
Pistons coach John Kuester said Stuckey was the right player to take the shot.
"No question I want the ball in his hands," he said. "You saw a lot of growth in a young man. I've been telling people about how good he can be. He can be one of the best guards in the league and he showed it tonight."
Iverson, once the best guard in the league, scored 11 points in his second game with the Sixers. He hit the tying jumper with 1:06 left that made it 86-all.
Iverson is 0-5 this season -- three losses with Memphis; two with the 76ers. Iverson missed seven of 10 shots from the floor and had three assists.
"It's going to get better," Iverson said. "This is one of these times when you find out what type of character you have as men."
The Pistons won without their top three stars. Guard Ben Gordon sat out with a sprained left ankle, and they had been playing without Richard Hamilton (ankle) and Tayshaun Prince (back).
"Without three of our best players to get a win on the road like this is always a good thing. It will help build confidence," Pistons center Kwame Brown said.
Stuckey and Jonas Jerebko were sensational in the fourth quarter and rallied against a struggling Sixers team looking for a break.
Jerebko made all three baskets in the fourth quarter -- and all three were clutch. He sank Detroit's first 3 of the game after seven misses that pulled the Pistons within one; another jumper that kept the deficit at one; and a 15-footer that gave them an 84-82 lead.
Iverson, who played 33 minutes as he tries to work his way into game shape, tied it for his first big shot in his second stint with the Sixers.
The Sixers blew a prime shot at going ahead when they missed two easy looks at the basket, the second one a tip by Samuel Dalembert that fell short.
That set the scene for Stuckey to come through. Stuckey's emergence was a big reason why the Pistons felt they could trade Chauncey Billups to Denver for Iverson last season.
Stuckey went up for the shot, but Iguodala was in his face to knock the ball free. Stuckey pounced on the loose ball and tossed up a little fade that went through for the winner.
Iverson deferred to Iguodala on the final shot. No good and the Sixers slumped home losers again.
"We got everything that we wanted on that last play and more," Iverson said. "The shot just didn't go in. I'll take that same shot every time. He had a good look."
The Sixers were counting on Iverson's marquee name to serve as a box office. They drew 20,000-plus in his homecoming Monday night, but attendance plummeted to 12,136 against the Pistons. That's just a tick more than the 11,965 they averaged in their first eight home games.
Iverson blocked the first shot of the game, stripped Ben Wallace of the ball at the top of the key that led to a Sixers basket, and intercepted a pass as he was falling out of bounds during a frantic first quarter.
He's still looking to get his legs under him after long stretches of inactivity as a non-factor until the fourth.
Iverson shed no tears nor did he exchange emotional hugs in his first game against the Pistons. He complained last season once the Pistons made him a reserve and eventually had his season cut short because of a back injury.
He did not play in the postseason and the Pistons let his $20-plus million contract expire.
Jerebko finished with 17 points, Jason Maxiell had 12 and Wallace grabbed 12 rebounds.
Dalembert had 17 points and 11 rebounds for the Sixers and Brand scored 17 points.