📜 [專欄新文章] 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.
👏 歡迎轉載分享鼓掌
同時也有2部Youtube影片,追蹤數超過9,300的網紅Khainina Khalil,也在其Youtube影片中提到,Hey Guys! How's Ramadhan so far? It's 10 days to raya & are you all prepared?? Well, here is one of my fav look & if you're the type who goes all ou...
「shell if else」的推薦目錄:
- 關於shell if else 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於shell if else 在 Kanok Ratwongsakul Fan Page Facebook 的最佳解答
- 關於shell if else 在 Roundfinger Facebook 的最讚貼文
- 關於shell if else 在 Khainina Khalil Youtube 的最佳貼文
- 關於shell if else 在 渡辺レベッカ ☆ Rebecca Butler Watanabe Youtube 的最佳解答
- 關於shell if else 在 【Shell Script】if ... else 條件判斷式 - 辛西亞的技能樹 的評價
- 關於shell if else 在 Shell script multiple if else statements - Stack Overflow 的評價
- 關於shell if else 在 Shell Scripting - If & If/else - YouTube 的評價
- 關於shell if else 在 Shell Script to trim if else condition [closed] - Unix ... 的評價
shell if else 在 Kanok Ratwongsakul Fan Page Facebook 的最佳解答
กาลครั้งหนึ่ง มีขอทานคนหนึ่ง ออกขอทานทุกวัน เขาอยากจะมีชีวิตเหมือนคนปกติ เพราะฉะนั้น เขาจึงมักจะขอทานเสบียงกรังและตุนไว้ แต่ว่า..
.
เขากักตุนเสบียงมาหลายปี ยุ้งฉางของเขาก็มีเพียงข้าวสารนิดหน่อยตลอด เขาไม่เข้าใจว่าทำไมเป็นเช่นนั้น เขาจึงตัดสินใจค้นหาสาเหตุ..
.
คืนวันหนึ่ง เขาแอบอยู่มุมหนึ่งของบ้านและจ้องไปที่เสบียง ในที่สุด เขาเห็นหนูตัวใหญ่มาขโมยกินเสบียงของเขา เขาโกรธมาก ตะโกนไปที่เจ้าหนูว่า ...
Continue ReadingOnce upon a time, there was a beggar every day. He wanted to live like a normal person, so he always asked for a nest province and stocked up, but..
.
He's been hoarding supplies for years. His barn has only had a little rice. He doesn't understand why it is. He decided to search for a cause..
.
One night he snuck in one corner of the house and stared at the provisions. Finally he saw a big rat steal his provisions. He was so angry. Shout out to the younger man.
.
′′ The rich have plenty of food in the rich house. Why don't you eat? Why do you eat? Specifically, I eat my food that is hoarding with hardship
.
The boy said, ′′ Your destiny has rice in 8 parts. Walk to beggar all over the place. You can't have a whole bucket of rice
.
Beggar asks the kid ′′ Why is it so?" The kid says, ′′ I don't know. You have to ask the Buddha..."
.
Beggars decided to travel west to ask Buddha for what the reason is for such a destiny..
.
When a beggar departs, he asks for a long journey. One day.. He walks until the dark sky finds a house, knocks on the door.
.
A butler walked out to ask what was the story. He said he asked for food to eat. The village owner saw him and asked him to beggar, ′′ It's dark like this. Why are you still travelling?" Beggar told the fate of the rich man's life.
.
I said.. I will ask for reasons with Buddha, millionaire. I heard so I was quick to invite you to sit in the house, give him a nest provision and some money. Beggars ask for money and supplies.
.
The millionaire told me the reason that ′′ my daughter is 16 years old and still can't speak. I beg you to ask the reason for Buddha
.
A millionaire once swears that whoever makes a daughter speak, he will marry her. Beggar. Listening to her. We think that she will go to Buddha. We take a chance to ask him. Beggar, so she asks her to ask her....
.
Beggars continue to travel through the mountain. Afterward, I walk to the mountain. One temple saw a temple. So I went to ask for water. One image of a monk holding a cane. It was very old, but I looked like I was horny.
.
The old monk gave him water to drink and told him to rest for a while and asked him where to go. Beggar, told the destination to go to the old age, held his hand and said..
.
′′ Please, please ask the Buddha. I have been practicing for over 500 years. The main thing should be in heaven. Why can't I fly up there? ′′ Beggar, so that I'm begging you...
.
He walked through the path of Huai, Nong, Khlong Bung, and arrived by the river. One river, no boat. What should I do? What should I cross?
.
Beggars cry and say or my life must be difficult like this. It's not over.. Suddenly, a giant turtle turns up above water, a turtle speaks in language. A beggar asks for crying here. Why are you crying here? Beggars tell all the stories. Old turtle Speak to him..
.
′′ I have been in practice for 1,000 years. The main part of becoming a flying dragon. Why is it still just an old turtle? If you meet Buddha, ask me, I will give you a ride across the river. Opposite side. ′′ Beggar with pleasure...
.
Beggars walk away. I don't remember how many days it is. I can't find Buddha. I think in my heart where the Buddha is. Dan Susan should be reached. I'm very sad. I'm depressed. I'm falling asleep. Daze...
.
Suddenly,... Buddha appeared to be begging for happiness. The Buddha asked the beggar, ′′ You've come this far. There should be a very important question, right...
.
′′ Yes Buddha, I have to ask many questions. Hope you can explain to me
.
The Buddha replied, ′′ Yes, but in one condition, you can ask the maximum of 3 questions. Because no one has ever asked more than 3 questions before
.
Beggars say yes. Think in my mind which question I ask?? Beggars feel.. Your own question is not important.
.
Old turtle has been on the casket for 1,000 years. It's not easy. The question he should have asked....
.
The old monk practices for 500 years. It's very difficult. The question should be asked.
.
A millionaire's daughter is pitiful. An understatement. How can she marry?
.
His question should be asked, and then beggars don't hesitate to ask questions 1
.
The Buddha replied to him, ′′ Turtle doesn't give up to the shell, so he can't become a dragon. There are 24 night pearls. If the turtle gives up, the turtle will become a dragon
.
Question 2 asks: ′′ The old man holds a magic cane all day long. But the cane is magical. One cane knocks on the floor and one cane on the floor. If the old man threw a staff, he would be able to heaven. So
.
Beggar is very happy. So he asks the 3th question. He answers ′′ If a girl finds her love, she can say it herself.. And suddenly, Buddha is gone..
.
Beggars feel that there is nothing important. I'm going back to the same beggar. I'm going back to the next time
.
Beggars come back to the turtle river, but the beggars should arrive, so they ask how Buddha says. Beggars say you take me across the river before I tell you.
.
Turtle takes a beggar across the river to beggar. Tells the cause of the turtle. You understand immediately. Take off the shell, give away the begging and say..
.
′′ There are 24 night pearls. It's priceless to me. It's not useful. I give it to you Turtle becomes a flying dragon.
.
Beggar takes 24 pearls. Hurry up to arrive on the mountain. Meet the old age. If you ask what the Buddha said, beggars tell the cause.
.
The old monk listened to it. He gave a magic cane to the old beggar. He drove the clouds to the sky and disappeared.
.
Beggar arrives in front of a millionaire house. Suddenly, a girl runs out and shouts loudly..
.
′′ The person who asked the Buddha was back, ′′ The millionaire ran out. He was shocked that his daughter suddenly said it. Beggars the words of the Buddha Monopoly. So happy that she gave her daughter a marriage to the beggar..
.
Love gives away. Love returns.
.
Happiness gives away. Happiness returns.
.
Think for someone else to think about you.
.
This is why and why. This is the rule..
.
When we read this article, there are 2 choices.
.
1. spread out to the fullest capacity to make the world more love or...
.
2. ignore virtual you never read it
.
Your small share may shine a spark in the heart. Many people have dreams.. Therefore, doing.. actions.. will lead to success.. if you don't do it, how can it be accomplished?
.
′′ The Buddhist Day ′′
.
Sunday, October 2, 2
The 1th waning moon, 1th month, 1th month.
.
@[764758687047006:274:ตั่วตั่วเปา]
@[366303750103337:274:ข่าวข้น คนเนชั่น]
@[629854510431777:274:รายการLineกนก]Translated
shell if else 在 Roundfinger Facebook 的最讚貼文
หนังที่ทำให้ร้องไห้มากที่สุดในรอบปี
---
1
ผมไม่ได้ร้องไห้บ่อยๆ ตอนดูหนังมานานแล้ว ร้องบ่อยๆ หมายความว่าร้องหลายหนในหนังหนึ่งเรื่อง แต่หนังเรื่องนี้ทำให้ร้องไห้จนนับครั้งไม่ไหว เพราะตั้งแต่สิบนาทีแรกก็น้ำตาซึมแล้ว ตอน "ปล่อยจรวดออกจากฐาน" แล้วอ็อกกี้เดินเข้าโรงเรียนไป
...Continue ReadingThe most crying movie of the year
---
1
I haven't cried often when I watched a movie for a long time. It means I sing many times in a movie. But this movie made me cry until I couldn't count. Because from the first ten minutes, I was crying when I "released the rocket off the base" and Ocky walked. Going to school.
2
The movie is over. Someone close to me why I cried so much and tease that I sing like an Ocky. I nodded. I thought some of my childhood would be like Ocky. I have insecure in some things. Wearing a spaceman hat to cover my face when I meet someone like this space and run away from this planet some days, but it shouldn't be just me that way. I think many people should have had a day like this.
3
I question myself why this movie hits so bad. I think the movie goes deep under the shell of humanity that is not about the look, gender, race, religion, political ideology, etc.
4
What is deeper than all that I say is "humanity" we have like each other. Afraid, worried, confused, weak, cuddle, and beautiful.
5
The movie shows us the "behind the scenes" of life. Even we can continue thinking that even the characters that the movie doesn't explain, there should be a sympathetic life.
6
So I don't feel angry with Julian's parents for showing up at the end of the story because I know that if I give me a little more time to get to know each other, we will understand them for doing this.
7
I used to sit and look at friends who are in a relationship and think that each person has "special skills" to survive. Some people may not like to do it, but there is a skill that brings life away. Some people don't say no. But if you try to write this like a flower in the middle of the page. Some people have skills to create laughter. Some people are skilled, so it's easier to live happily than others, etc.
8
We are all "wonders" in our way, as Ocky said.
9
But this " magic " is a result from some aspects of our lives, so we develop something else into " strengths "
10
Some people say that if we have lower cost than others, we will have more effort than others. What Ocky has more than the average child is the love from his family. This is " strengths " that can replace " beautifully "
11
The love he gets, plus feeling bad about what appears on his face makes him gentle, which is not every child can be gentle like him. That's what close friends can feel.
12
I don't want to be close to "someone who is bright" but I want to be close to someone who is with me and feel comfortable. The one who doesn't think bad to others because they are very much.
13
If you look at what everyone wants is love. Julian, try to show off or show off. Because they want friends to accept themselves. It's not different from Ocky who wants to have a real friend who gives love by looking. Through his weird looks
14
It's funny, we want love, but we often think we have to steal love from others. Love is the source of hate.
15
We think love is limited, but really?
16
Love is limited when we call and it seems to be unlimited if we give as father and mother have given to Ocky.
17
And love seems to be so dry if we are the one who calls for love that we have to be loved by this person only as Via has always felt for mother.
18
There is always love for us in the world. If we don't expect to be loved by the one we want. As via, there is a favorite grandmother.
19
And love will happen when we know how to give love as Miranda has found out after she opens the opportunity for her family to play.
20
When we are longing for love, we become an important monster - in that we will not see love. And when we give someone love, we will feel the tenderness of our heart and become beautiful human beings in that condition. Always want to give us love
21
Apart from everyone is a " miracle human being " is also a " space man " who floats above the real world. Not only has to wear a hat to cover their own face, but every human being hide the " true face " It's always our own. We have problems and secrets that we don't dare to let anyone know. We hide under the mask of normal. Even if we are fighting some problems in life together.
22
Hiding is a sign of terror. We fear that if others see our "scars" then they will laugh at it. He will see it as a strange thing. He will see that we are weak.
23
So Miranda pretended to lie that there was a warm family, so he didn't tell her brother about her boyfriend. When she had trouble with Miranda, she didn't tell anyone.
24
But this is what is necessary for life. The person we trust enough to take off an astronaut hat. Reveals the naked face that opens the feeling in the deep. He doesn't judge us. We don't look at us with eyes. Pity, no mouth. To our problems more than that, He is ready to embrace us with love, understanding.
25
" the one we dare to open the hat in front of him " that makes us back to be " human " again. No need to be an astronaut. No need to run away from the truth on earth.
26
In our life, we are looking for this person.
27
When we meet that person, we will find that there is still love in this world. We will know love and we will become love to others.
28
If you don't close yourself to be loved by someone in this life, we will meet this person for sure.
29
Because we were created for someone to love the elements in life that are handsome to become like this nowadays. It makes us become a certain number of people who will be hated, but there will be a number of us who are not like us. Love by someone who is different from us and may be hated by someone who loves us.
30
The real world is so, we are lathe right by some people, some people and not suitable for some kind of people. Nobody can make everyone in this world love.
31
But even if I don't love, even if I interrupt the movie, I still tell you what's more important. That's kindness. That's kindness
32
Impressive sentence is said out of a cute kid's mouth. "If you have to choose between being right and being kind, choose to be kind"
33
Because when we show kindness to others, love will happen.
34
Many times, we fight big to discuss who is right. Finally, there may be losers - the conclusion is that both of them are missing. They are not stuck. Both of them. Wounds with both of them for a long time.
35
We may forget what is more important than authenticity. That's love. When loving that person becomes a small thing. Because the most accurate thing is - in a relationship, we don't have to argue about who is right.
36
The world is not like in this movie, but this is what the world should be.
37
I cried no good piece when Ocky was up for over an hour. I forgot how weird Ocky was at the end he turned into the most lovely little angel.
38
Isn't this the feeling of looking deeper into the beauty of human being in everyone?
39
We will see this beauty when we embrace " strange " under the astronauts that deprive us from knowing each other because we are " strange " together.
40
When naked, we can feel the beauty underneath the quirdness that is just a shell.
41
Ocky's face is not strange when friends accept the scars in our life. It's not weird. If someone accepts us as we are, then that person will experience our beautiful side.
42
This is the potential of human beings. When we don't steal love and give love to each other, we will bring cuddle beautiful side. cuddle
43
Definitely not easy because each person has wounds that the other person can't see, even we can't understand anyone.
44
But Wonder gives me hope for life because this movie tells me that we should understand human friends as much as we can because each person is up to some reason why he is the way he is.
45
And if you can't understand someone who has passed in our life, don't judge him that he is wrong. Then we are right. Don't judge him that he is bad and we are good
46
If you really have to choose, choose to be kind instead of right.
47
If you don't understand, give mercy.
48
We may not give love to all people like we can't call for love from everyone.
49
That's the miracle of human being designed for someone to love
50
While he's traveling to find "who" at least we can be the one who doesn't make him feel more weird.
51
If you don't love, but don't throw hate on anyone.
52
All you can do with everyone is not be quick to judge him as long as we haven't touched the humanity of that person.Translated
shell if else 在 Khainina Khalil Youtube 的最佳貼文
Hey Guys!
How's Ramadhan so far? It's 10 days to raya & are you all prepared??
Well, here is one of my fav look & if you're the type who goes all out masa raya then you can try this look! Not necessarily kena guna all these products, it's really up to you!
But my thought on these products after about 3 time using them is, they're actually pretty good. I love them, maybe the Nars orgasm palette - if you wanna put it on your eyelid- make sure to top it with powdered shimmer shadow, or else it'll crease as hell.
So far so good! Will update if i need to on Instagram!
See you in another video!
Thanks for watching & don't forget to subscribe ok! Leave your thoughts too!
Last but not least, Thank you for watching!
Leave a love, I'll love you back ;)
Find me on Instagram: @khaininakhalil ?
PRODUCTS USED:
NARS ORGASM COLLECTION:
(Available in stores & sephora)
https://www.narscosmetics.com/USA/orgasm-collection?prfcountry=USA&prfmarket=USA
LAURA MERCIER PRODUCTS:
(Available in stores & sephora)
https://www.lauramercier.com/
https://www.sephora.my/products/laura-mercier-translucent-loose-setting-powder/v/translucent
https://www.sephora.my/products/laura-mercier-smooth-finish-foundation-powder-spf20/v/1-light-beige-with-yellow-undertones
https://www.sephora.my/products/laura-mercier-foundation-primer/v/default
https://www.sephora.my/products/laura-mercier-matte-radiance-baked-powder/v/bronze-01
https://www.sephora.my/products/laura-mercier-candleglow-soft-luminous-foundation/v/1c1-shell-fair-with-cool-undertones
FOUNDATION SHADE: 3W2 GOLDEN
MAKE UP FOR EVER:
https://www.makeupforever.com/my/en-my/make-up/face/concealer/ultra-hd-concealer-0
CONCEALER SHADE: 33
SIGMA BEAUTY:
https://www.sigmabeauty.com/warm-neutrals-volume-2.html
https://www.sigmabeauty.com/e35-tapered-blending.html
PRETTY VULGAR:
https://www.prettyvulgar.com/shop/eyes.html
https://www.sephora.my/products/pretty-vulgar-the-ink-gel-eyeliner/v/02-plot-twist
URBAN DECAY:
(Available in stores & sephora)
https://www.sephora.my/products/urban-decay-brow-blade/v/dark-drapes
ANASTASIA BAVERLY HILLS:
https://www.anastasiabeverlyhills.com/
https://www.anastasiabeverlyhills.com/mini-matte-lipstick-set/ABH01-33102.html
SHADE: COCONUT
LASHES:
LASHBAR MALAYSIA CODE (857)
-can search on instagram & available at midvalley.
shell if else 在 渡辺レベッカ ☆ Rebecca Butler Watanabe Youtube 的最佳解答
今日はリクエストにお応えして、One Directionの「Drag Me Down」を日本語で歌ってみました♪ Enjoy!
By request, a Japanese cover of Drag Me Down by One Direction. Enjoy!
~♪~♪~♪~♪~♪~
曲情報 / SONG INFO
~♪~♪~♪~♪~♪~
One Direction / Drag Me Down
アルバム: Made in the A.M. (2015)
作詞曲: Julian Bunetta, John Ryan
日本語詞:渡辺レベッカ
■公式MV
https://youtu.be/Jwgf3wmiA04
~♪~♪~♪~♪~♪~
リンク / LINKS
~♪~♪~♪~♪~♪~
■HP⇒ http://BlueEyedUtaUtai.jimdo.com
■Facebook⇒ http://facebook.com/blueeyedutautai
■Twitter⇒ @BlueEyedUtaUtai
~♪~♪~♪~♪~♪~
歌詞 / LYRICS
~♪~♪~♪~♪~♪~
心は炎 闇の中も
怖いものなんかないさ
僕の魂は 川で君は
ただ一つの船さ
君がいなきゃ途方に暮れる
最高の自分になれず
君がいると僕は光る
勇気をくれるんだ yeah
ずっと君だけがそばにいてくれたね
僕 を信じてくれる ただ一人さ
光がどんなに 眩しく目に当たっても
君の愛あれば 絶対 諦めないんだ
誰も僕を 引きずり下ろせない
誰も僕を 引きずり下ろせない
I got fire for a heart
I'm not scared of the dark
You've never seen it look so easy
I got a river for a soul
And baby you're a boat
Baby you're my only reason
If I didn't have you there would be nothing left
The shell of a man who could never be his best
If I didn't have you, I'd never see the sun
You taught me how to be someone, yeah
All my life, you stood by me
When no one else was ever behind me
All these lights, they can't blind me
With your love, nobody can drag me down
Nobody, nobody
Nobody can drag me down
Nobody, nobody
Nobody can drag me down
~♪~♪~♪~♪~♪~
Romanized Lyrics
~♪~♪~♪~♪~♪~
kokoro wa hono'o yami no naka mo
kowai mono nanka nai sa
boku no tamashii wa kawa de kimi wa
tada hitotsu no fune sa
kimi ga inakya tohou ni kureru
saikou no jibun ni narezu
kimi ga iru to boku wa hikaru
yuuki wo kureru n' da Yeah
zutto kimi dake ga soba ni ite kureta ne
boku wo shinjite kureru tada hitori sa
hikari ga donna ni mabushiku me ni atatte mo
kimi no ai areba zettai akiramenai n' da
daremo boku wo hikizuri-orosenai
daremo boku wo hikizuri-orosenai
I got fire for a heart
I'm not scared of the dark
You've never seen it look so easy
I got a river for a soul
And baby you're a boat
Baby you're my only reason
If I didn't have you there would be nothing left
The shell of a man who could never be his best
If I didn't have you, I'd never see the sun
You taught me how to be someone, yeah
All my life, you stood by me
When no one else was ever behind me
All these lights, they can't blind me
With your love, nobody can drag me down
Nobody, nobody
Nobody can drag me down
Nobody, nobody
Nobody can drag me down
shell if else 在 【Shell Script】if ... else 條件判斷式 - 辛西亞的技能樹 的推薦與評價
Shell Script 的條件宣告是用[] ,if 條件後面需接then ,block 結束後接fi. ... <看更多>